Python, Paramiko: 如何使用paramiko执行"ssh -n user@host cmd"?
我想通过Python远程执行一个命令,使用的是SSH。在这个情况下,我需要把stdin重定向到/dev/null。
这就像使用OpenSSH客户端时加上-n这个选项一样:
ssh -n user@host cmd
那么,如何用Paramiko实现这个-n的功能呢?
我发现paramiko.SSHClient.exec_command()似乎不支持这个功能,但我可能漏掉了什么?
2 个回答
1
我建议你放弃使用paramiko,改用fabric。这个工具可以让你在远程系统上执行命令。它其实是用paramiko来建立ssh连接的,但提供了一个更简单易用的界面,可以做更多的事情。
我不太明白你为什么需要把标准输入(stdin)重定向到/dev/null,不过fabric有一些设置可以让你避免这个问题。
祝你好运!
2
如果我没理解错你的问题:你其实不需要做到这一点。没有什么东西会自动从标准输入(stdin)读取或写入到远程进程的标准输入,除非你自己明确地去做。所以你不需要去防止从标准输入读取的事情发生,对吧?
补充一下:如果远程进程期待在标准输入上接收到数据,并且一直在等待,那可能会有问题。你可以试着在通道上调用 shutdown_write()
:
stdin, stdout, stderr = client.exec_command(cmd)
stdin.channel.shutdown_write()