2015-06-17 128 views
2

如何使用Paramiko執行多個命令並將輸出讀回到我的python腳本中?如何使用paramiko執行多行並只讀取其輸出

這個問題理論上在這裏回答How do you execute multiple commands in a single session in Paramiko? (Python),但在我看來,答案是不正確的。

問題是,當你讀取標準輸出時,它讀取終端的全部內容,包括你「輸入」到終端中的程序。

試試看(這基本上是從上面線程複製粘貼):

import paramiko 
machine = "you machine ip" 
username = "you username" 
password = "password" 
client = paramiko.SSHClient() 
client.set_missing_host_key_policy(paramiko.AutoAddPolicy()) 
client.connect(machine, username = username, password = password) 
channel = client.invoke_shell() 
stdin = channel.makefile('wb') 
stdout = channel.makefile('rb') 
stdin.write(''' 
cd tmp 
ls 
exit 
''') 
print stdout.read() 
stdout.close() 
stdin.close() 
client.close() 

所以我的問題是,我該如何執行多個命令和只讀這些命令的輸出,而不是輸入我「輸入」和輸出?

在此先感謝您的幫助和時間。

回答

0

您看到了鍵入的命令,因爲shell會將它們回顯。您可以通過運行

stty -echo 

在您的其他命令之前。

另一種方法是不調用交互式shell,而只是直接運行這些命令,除非出於其他原因您特別需要交互式shell。比如你可以說

client.exec_command('/bin/sh -c "cd /tmp && ls") 

如果你想有一個外殼,但沒有一個PTY,你可以嘗試

client.exec_command('/bin/sh') 

,我認爲這將抑制回聲了。

1
import paramiko 
ssh = paramiko.SSHClient() 
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) 
target_host = 'x.x.x.x' 
target_port = 22 
target_port = 22 
pwd = ':)' 
un = 'root' 
ssh.connect(hostname = target_host , username = un, password =pwd) 
#Now exeute multiple commands seperated by semicolon 
stdin, stdout, stderr = ssh.exec_command('cd mydir;ls') 
print stdout.readlines() 
+0

請說明您一起碼 –

+0

答案創建SSHClient對象,然後調用'連接()「」連接到本地SSH server.Setting主機關鍵政策需要一個方法調用到SSH客戶端對象( ''set_missing_host_key_policy()'),它設置你想要管理入站主機密鑰的方式,或者你可以使用paramiko.AutoAddPolicy()''來自動接受未知的密鑰(不安全)。接下來我們設置主機名,密碼,目標主機和目標主機(22 ssh端口)。我們將connect方法與ssh客戶機對象調用,然後調用exec_command並將命令和存儲命令輸出傳遞到stdout和結尾,stdout.readlines()來讀取輸出。 – SlickTester

相關問題