Python, Paramiko: 如何使用paramiko执行"ssh -n user@host cmd"?

3 投票
2 回答
1064 浏览
提问于 2025-04-17 03:06

我想通过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()

撰写回答