我试图通过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