2017-04-11 118 views
0
import paramiko, commands 
ssh_client = paramiko.SSHClient() 
ssh_client.set_missing_host_key_policy(paramiko.AutoAddPolicy()) 
ssh_client.load_system_host_keys() 
ssh_client.connect('xx.xx.x', username='abc', 
key_filename='rsa') 

line ="Hello" 
stdin, stdout, stderr=ssh_client.exec_command('echo $line') 
print stdout.readlines() 

我想將「行」內容傳遞給回顯。但我得到 [u'\ n']作爲輸出。如何將本地變量傳遞給遠程回顯命令?

我也試過echo \ $行,echo「$ line」。但沒有得到你好作爲輸出。

回答

1

遠程shell無法訪問您的程序變量,該命令必須在其啓動之前組成。

stdin, stdout, stderr = ssh_client.exec_command('echo "{0}"'.format(line)) 

注意的安全問題(感謝@Tripleee),在Python 3中使用shlex.quote來提高代碼的健壯性:

stdin, stdout, stderr = ssh_client.exec_command('echo {}'.format(quote(line))) 
+0

感謝。工作! – vishnu

+1

對於包含雙引號或美元符號或反引號的'line'值,它仍然不健壯,它們分別引入了shell的可變插值和命令替換。單引號可以防止後者繞過前者,但是後者的值不能包含單引號。爲了完全健壯,你需要使用[如'shlex.quote()'](/ questions/35817/how-to-escape-os-system-calls-in-python)。 – tripleee

+0

非常好的一點@tripleee,謝謝;) – klashxx

相關問題