无法使用paramiko查看ifconfig输出

时间:2013-07-24 07:10:16

标签: python paramiko

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

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。

任何想法如何解决这个问题? 提前谢谢......

2 个答案:

答案 0 :(得分:5)

您的服务器有可能区分交互式和非交互式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 1}},即在paramiko会议的路径之外。

答案 1 :(得分:1)

要获取某些应用程序二进制文件的输出,必须使用以下标志: get_pty = True

我仍然在寻找一些命令发生的原因,这对我来说还不得而知。但是,我发现解决此问题的方法显示在下面的示例中:

import paramiko
ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())

ssh.connect('10.2.0.230', username='ibmsys1', password='passw0rd', timeout=5)
stdin, stdout, stderr = ssh.exec_command('/sbin/ifconfig', timeout=3, get_pty=True)

print stdout.read()

通常我会跑: #stdin, stdout, stderr = ssh.exec_command('/sbin/ifconfig')

在我的示例中,我刚添加了2个新标记,timeout=3get_pty=True 这解决了我的问题。超时标志不相关,但我总是将它作为良好做法。这里的要点是使用get_pty = True PS。我建议不要相信系统$ PATH,总是输入要运行的应用程序的完整路径,例如:/ usr / bin / my_binary或在你的情况下/ sbin / ifconfig

我希望这可以帮助您解决问题。 祝你好运!