我使用下面的代码在远程机器上执行命令,

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会话的路径之外。

07-26 02:47