没有从parmiko/ssh命令获得输出

0 投票
1 回答
575 浏览
提问于 2025-04-16 00:01

我正在使用paramiko/ssh/python来尝试在远程服务器上运行一个命令。当我手动通过ssh连接并运行这个命令时,我得到了想要的结果。但是如果我使用下面这个从这个网站的另一个帖子中借来的python代码,就没有返回任何数据。如果我把命令改成更简单的,比如'pwd'或'ls',我就能得到输出。希望能得到一些帮助。

谢谢,
Matt

import paramiko  
import time  
import sys, os, select  
import select  
hostname='10.15.27.166'  
hostport=22  
cmd='tail -f /x/web/mlog.txt' #works  
#cmd='customexe -args1 -args2' #doesn't work  
client = paramiko.SSHClient()  
client.load_system_host_keys()  
client.connect(hostname=hostname, username=username, password=password)  
transport = client.get_transport()  
channel = transport.open_session()  
channel.exec_command(cmd)  
while True:  
  rl, wl, xl = select.select([channel],[],[],0.0)  
  if len(rl) > 0:  
    # Must be stdout  
    print channel.recv(1024)  
  time.sleep(1)

1 个回答

2

我找到了一种解决办法,虽然不一定是问题的根本原因:当paramiko建立ssh连接时,它没有在远程服务器的我的家目录中运行我的bash_profile文件。所以,我把bash_profile里的命令复制到了cmd变量里,这样就手动加载了一些我原本以为会自动加载的环境变量。然后,命令“customexe ...”就按预期返回了输出。

撰写回答