我試圖通過SSH遠程執行一條命令,在這種情況下需要stdin被重定向到/ dev/null。Python,Paramiko:如何使用paramiko做「ssh -n user @ host cmd」?
也就是說,與使用OpenSSH客戶端以其-n標誌:
ssh -n [email protected] cmd
你如何做到這一點(N)與Paramiko?
paramiko.SSHClient.exec_command()似乎不允許這樣做,但也許我錯過了什麼?
我試圖通過SSH遠程執行一條命令,在這種情況下需要stdin被重定向到/ dev/null。Python,Paramiko:如何使用paramiko做「ssh -n user @ host cmd」?
也就是說,與使用OpenSSH客戶端以其-n標誌:
ssh -n [email protected] cmd
你如何做到這一點(N)與Paramiko?
paramiko.SSHClient.exec_command()似乎不允許這樣做,但也許我錯過了什麼?
除非我不正確地理解你的問題:你不需要做到這一點。除非您自己明確這麼做,否則不會自動從標準輸入讀取/寫入遠程進程的標準輸入。所以你不需要防止從stdin讀取發生?
編輯:如果遠程進程需要stdin上的數據,並且一直在等待它,可能會出現問題?嘗試在通道上調用shutdown_write()
:
stdin, stdout, stderr = client.exec_command(cmd)
stdin.channel.shutdown_write()
那麼,在這種情況下,它似乎我做到了。我試圖在遠程主機上執行一些powershell命令,並花費數小時的時間試圖使它與Paramiko一起工作。我終於得出結論,爲了這個工作,我需要做「ssh -n user @ host cmd」,而「ssh user @ host cmd」只會永遠掛起。通過使用OpenSSH客戶端的命令行手動執行,確認沒有-n標誌,遠程命令會掛起。 – herira
@herira:我已經更新了我的答案,不知道它會有幫助嗎? – Steven
希望我在幾個小時前問過。謝謝,史蒂文! :) – herira