2013-04-25 61 views
0

我試圖通過Python來執行一些命令來遠程機器執行中的python-的paramiko

ssh = paramiko.SSHClient() 
    ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) 
    ssh.connect(SERVER_IP, username='root', password='xxxxx') 
    stdin, stdout, stderr = ssh.exec_command(
     "tar -C /home -xzf /home/Tests.tar.gz;dos2unix /home/Tests/run.py;chmod +x /home/Tests/run.py;/home/Tests/run.py>/home/Tests/log.txt" 
    ) 

似乎最後一個命令/home/Tests/run.py>/home/Tests/log.txt不正常的log.txt不具有價值,同樣的效果很好,如果我做遠程機器終端上的/home/Tests/run.py>/home/Tests/log.txt

如何解決?

在此先感謝

回答

0

爲了確保您paramiko代碼是否工作正常,連接製成,嘗試像

stdin, stdout, stderr = ssh.exec_command("hostname") 

簡單的東西,並確保stdin包含你所期望的。然後一展身手,在調試命令你遠程執行:

$ tar -C /home -xzf /home/Tests.tar.gz 
$ dos2unix /home/Tests/run.py 
$ chmod +x /home/Tests/run.py 
$ /home/Tests/run.py > /home/Tests/log.txt 

如果通過正規ssh連接運行刪除計算機上的代碼,你期望它,如果你希望它也工作在它必須執行paramiko

1

你是不是運送客戶端會話,像這樣:

ssh = paramiko.SSHClient() 
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) 
ssh.connect(SERVER_IP, username='root', password='xxxxx') 
#note the next line you are missing 
ssh_session = ssh.get_transport().open_session() 

然後(ssh_session的聲明之後)你可以使用ssh_session.exec_command(. . .)

試試看看它是否有效。