使用paramiko ssh客户端无法使用参数执行远程放置的ssh脚本

时间:2017-04-01 09:16:09

标签: python ssh paramiko windows-shell

我的代码读起来像这样 -

import paramiko
import time
import sys

client = paramiko.SSHClient()
client.set_missing_host_key_policy(paramiko.AutoAddPolicy())

def runScripts():
    parameter1 = 1000
    client.connect('mysite.com', username='user', password='pass')
    print ("Logged in into Site server")
    stdin, stdout, stderr = client.exec_command("cd parent_folder/Sub_folder/script_folder; ./script1.sh %s" % parameter1)
    print ("Script executed perfectly")
    client.close()

runScripts()

我在控制台上输出如下 -

Logged in into Site server
Script executed perfectly 

但是检查了因脚本而受影响的文件.sh 1000没有变化。问题不在于script.sh,因为我可以手动运行它并且它的行为符合预期。

客户端是否无法检测到命令的结束?

1 个答案:

答案 0 :(得分:1)

我找到了对youtube视频上我自己的查询的回答,以获取交互式命令。

  1. 一些如何解决命令终止问题并且客户端无法找到它的结尾,因为它不是unix / system defined命令(“系统命令如ls -lrt,cd,grep与客户端完美配合”)
  2. 所以我尝试使用类似下面代码的通道来执行位于需要参数的服务器上的shell脚本 -

    def runScripts():

    parameter1 = 1000
    client.connect('mysite.com', username='user', password='pass')
    channel = client.invoke_shell()
    print ("Logged in into Site server")
    channel.send("cd parent_folder/Sub_folder/script_folder; ./script1.sh %s" % parameter1)
    print ("Script executed perfectly")
    client.close()
    

    runScripts()

  3. 在上面的runScripts函数中,我引入了调用shell的新通道,然后我们可以在发送命令完成后通过此通道发送任何命令或数据,执行发生并且通道关闭。

  4. 如果它对你们有用,请接受答案。谢谢。