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

3
我正在尝试通过Python远程执行SSH命令,并且在这种特殊情况下需要将stdin重定向到/dev/null。
也就是说,与使用OpenSSH客户端的-n标志相同:
ssh -n user@host cmd

如何使用Paramiko实现(-n)?

看起来paramiko.SSHClient.exec_command()不允许这样做,但也许我漏掉了什么?

2个回答

2
除非我理解你的问题有误:你不需要做到这一点。除非你自己明确地这样做,否则不会自动从标准输入读取/写入到远程进程的标准输入。因此,您不需要阻止从标准输入读取发生?
编辑:如果远程进程期望在标准输入上接收数据并等待它,可能会出现问题?尝试在通道上调用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

1

我建议放弃使用paramiko,开始使用fabric。它可以让你在系统上进行远程调用。它使用paramiko进行ssh连接,并提供了更好的干净接口来完成更多任务。

我不确定为什么你需要将stdin pip到/dev/null,但是fabric有一些设置可以抑制它。

祝你好运!


谢谢,我会在有时间的时候进行研究。目前我有一个截止日期,要求我使用Steven的解决方案。 :) - herira

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接