我使用下面的代码在远程机器上执行命令,
import paramiko
import os
dssh = paramiko.SSHClient()
dssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
dssh.connect('192.168.1.5', username='root', password='asdfghhh')
import os
stdin, stdout, stderr = dssh.exec_command('ls')
print stdout.read()
stdin, stdout, stderr = dssh.exec_command('ifconfig')
print stdout.read()
stdin, stdout, stderr = dssh.exec_command('ps')
print stdout.read()
dssh.close()
当我执行程序时,它能够显示ls和ps以及其他命令的输出。
但是,没有观察到ifconfig o/p。
你知道怎么解决这个问题吗?
提前谢谢。。。
最佳答案
您的服务器可能会区分交互式和非交互式SSH会话,并且针对不同的会话运行不同的启动脚本。尝试通过paramiko SSH会话和常规交互会话在远程主机上运行echo $PATH
,并比较输出。
对于解决方法,您可以在交互式会话中的远程服务器上执行which ifconfig
以获取绝对路径并在paramiko命令中使用该路径。
stdin, stdout, stderr = dssh.exec_command('/abs/path/to/ifconfig')
注意
在我的一个主机上,来自paramiko SSH客户端的
echo $PATH
结果是/usr/bin:/bin
,而在交互会话中是/usr/local/sbin:/usr/sbin:/usr/bin:/sbin:/bin
,并且ifconfig
确实位于/usr/sbin
中,即paramiko会话的路径之外。