Python 执行命令后SSH会话未返回o/p
我使用openSSH在测试机器(WindowsXP)和控制器机器(Win7)之间建立ssh连接。我已经在测试机器上配置了ssh服务器,并且能够获得ssh会话并运行命令。当我在这个ssh会话中运行命令时,我在putty会话中得到了显示的o/p,但是当我使用相同的命令并尝试检索o/p时,我没有得到任何值 我已经在我的XP机器上安装了openssh,这是适用于Windows v3.8.1p1-1的openssh版本 这就是我配置它在windows上运行ssh的方式Python 执行命令后SSH会话未返回o/p,python,ssh,stdout,paramiko,Python,Ssh,Stdout,Paramiko,我使用openSSH在测试机器(WindowsXP)和控制器机器(Win7)之间建立ssh连接。我已经在测试机器上配置了ssh服务器,并且能够获得ssh会话并运行命令。当我在这个ssh会话中运行命令时,我在putty会话中得到了显示的o/p,但是当我使用相同的命令并尝试检索o/p时,我没有得到任何值 我已经在我的XP机器上安装了openssh,这是适用于Windows v3.8.1p1-1的openssh版本 这就是我配置它在windows上运行ssh的方式 C:\Documents and S
C:\Documents and Settings\Administrator>cdc:\OpenSSH
C:\OpenSSH>cd-bin
C:\OpenSSH\bin>mkgroup-l>..\etc\group
C:\OpenSSH\bin>mkpasswd-l-u管理员>>..\etc\passwd
C:\OpenSSH\bin>net启动opensshd
请求的服务已启动。
下面是我的代码
import paramiko
class TestSSH():
def __init__(self):
self.ip = "172.xxx.xxx.xxx"
self.user = "Administrator"
self.password = "passpass"
def run(self):
ssh_client = paramiko.SSHClient()
ssh_client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh_client.connect(
self.ip,
username = self.user,
password = self.password
)
std_in, std_out, std_err = ssh_client.exec_command("dir")
print std_out.read()
obj = TestSSH()
obj.run()
这是我在putty课程中得到的o/p-
C:\Documents and Settings\Administrator目录
2013年11月14日下午3:11。
2013年11月14日下午3:11。。
2013年11月14日下午3:12桌面
2011年7月27日下午6:00最爱
2013年11月14日下午03:11赫曼特
2011年7月27日下午6:00我的文件
2011年7月27日晚上11:12开始菜单
0个文件0个字节
7个目录39932612608可用字节
C:\Documents and Settings\Administrator>
但是我没有收到任何订单
我已经尝试过windows name FreeShd的其他SSHutability,我可以通过putty和execute命令进行连接,但是,我只能连接但不能执行该命令。
我在freeshd服务器上遇到以下错误
无法在远程系统上执行命令或shell:无法执行进程。
此o/p进入std\U out而不是std\U err变量。您没有得到任何输出的原因是没有输出,因为远程系统无法运行
dir
命令。您确实收到了一条错误消息,但它是打印到stderr而不是stdout的,因此除非您打印出std\u err.read()
,否则您永远不会看到它
至于你为什么会出错,没有更多的信息很难猜测。这里有一些可能性
首先,dir:notfound
,它看起来像是从POSIX shell中得到的错误消息。(这正是我从ksh
;sh
/bash
,csh
/tcsh
,和zsh
中得到的,它们都是相似的,但并不完全相同。)而且大多数POSIX系统在路径上的任何地方都不会有一个名为dir
的程序。您是否可能意外连接到错误的计算机,而该计算机不是Windows机箱
如果它是Windows box,但安装了*nix样式的shell(例如通过cygwin或MinGW),这可能是用户的默认shell,还是ssh服务器配置中指定的shell?如果您正在使用cygwinsshd
而不是本机Windows ssh服务器,则很可能出现这种情况
可以将Powershell配置为提供简短错误,而不是通常的详细错误。我从来没有这样做过,所以我不知道它的简短错误“术语'dir'未被识别为cmdlet、函数、脚本文件或可操作程序的名称…”看起来像“dir:not found”,但这并非不可能。当然,您还必须将Powershell设置为用户的默认shell,或者覆盖ssh服务器配置中的默认shell以实现此目的,我非常确定
dir
在默认别名列表中,因此您也必须覆盖它。您没有得到任何输出的原因是没有输出,因为远程系统无法运行dir
命令。您确实收到了一条错误消息,但它是打印到stderr而不是stdout的,因此除非您打印出std\u err.read()
,否则您永远不会看到它
至于你为什么会出错,没有更多的信息很难猜测。这里有一些可能性
首先,dir:notfound
,它看起来像是从POSIX shell中得到的错误消息。(这正是我从ksh
;sh
/bash
,csh
/tcsh
,和zsh
中得到的,它们都是相似的,但并不完全相同。)而且大多数POSIX系统在路径上的任何地方都不会有一个名为dir
的程序。您是否可能意外连接到错误的计算机,而该计算机不是Windows机箱
如果它是Windows box,但安装了*nix样式的shell(例如通过cygwin或MinGW),这可能是用户的默认shell,还是ssh服务器配置中指定的shell?如果您正在使用cygwinsshd
而不是本机Windows ssh服务器,则很可能出现这种情况
可以将Powershell配置为提供简短错误,而不是通常的详细错误。我从来没有这样做过,所以我不知道它的简短错误“术语'dir'未被识别为cmdlet、函数、脚本文件或可操作程序的名称…”看起来像“dir:not found”,但这并非不可能。当然,您还必须将Powershell设置为用户的默认shell,或者覆盖ssh服务器配置中的默认shell以实现这一点,我非常确定
dir
在默认别名列表中,因此您也必须覆盖它。我不知道如何解决您原始ssh服务器的问题,但现在您已经切换到FreeShd,您遇到了一个不同的问题
无法在远程系统上执行命令或shell:无法执行进程
基本上意味着它试图在没有shell的情况下执行dir
,这将不起作用。您的路径上没有dir.exe
;cmd.exe
中内置了一个dir
命令
换句话说,这与执行ba时遇到的问题相同
cmd /c dir