我正在使用 openSSH 在测试机 (Windows XP) 和 Controller 机 (win 7) 之间建立 ssh 连接。我已经在测试机器上配置了 ssh 服务器,我能够获取 ssh session 并运行命令。当我在此 ssh session 中运行命令时,我在 putty session 中显示了 o/p,但是当我使用相同的命令并尝试检索 o/p 时,我没有得到任何值。
我在我的 XP 机器上安装了 openssh,这是 OpenSSH for Windows v3.8.1p1-1 版本。
这就是我在 Windows 上运行 ssh 的配置方式
C:\Documents and Settings\Administrator>cd c:\OpenSSH
C:\OpenSSH>cd bin
C:\OpenSSH\bin>mkgroup -l >> ..\etc\group
C:\OpenSSH\bin>mkpasswd -l -u administrator >> ..\etc\passwd
C:\OpenSSH\bin>net start opensshd
The requested service has already been started.
下面是我的代码
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 session 中得到的 o/p -
Directory of C:\Documents and Settings\Administrator
11/14/2013 03:11 PM <DIR> .
11/14/2013 03:11 PM <DIR> ..
11/14/2013 03:12 PM <DIR> Desktop
07/27/2011 06:00 PM <DIR> Favorites
11/14/2013 03:11 PM <DIR> hemant
07/27/2011 06:00 PM <DIR> My Documents
07/27/2011 11:12 PM <DIR> Start Menu
0 File(s) 0 bytes
7 Dir(s) 39,932,612,608 bytes free
C:\Documents and Settings\Administrator>
但是我没有得到任何 o/p
我已经尝试使用其他 sshutility 为 windows 名称 freeSSHd,我能够通过 putty 连接并执行命令,但是,我只能连接但不能执行命令。 我在使用 freeSSHd 服务器时遇到以下错误。
无法在远程系统上执行命令或 shell:无法执行进程。
此 o/p 进入 std_out 而不是 std_err 变量。
请您参考如下方法:
我不知道如何解决你原来的 SSH 服务器的问题,但现在你已经切换到 freeSSHd,你遇到了一个不同的问题。
Unable to execute command or shell on remote system: Failed to Execute process 基本上意味着它试图在没有 shell 的情况下执行 dir,这是行不通的。您的PATH 上没有dir.exe; cmd.exe 中内置了一个 dir 命令。
换句话说,这与您在 POSIX 系统上尝试在没有 shell 的情况下执行 bash 内置命令时遇到的问题相同。解决方案是相同的:使用 dir 作为命令执行 shell。
方法是:
cmd /c dir
freeSSHd 可能还有一个错误,它会做一些花哨的事情来试图隐藏 cmd.exe 终端和 POSIX 终端之间的差异,这可能会导致您收到有关“找不到控制台窗口”的错误。希望您不会遇到那个;如果这样做,请深入了解首选项,应该有一个复选框可以关闭这些东西。
而且,现在我想起来了,无论您原来的 ssh 服务器运行怪异的原因是什么(运行 ksh 或其他),让它执行 cmd/c dir 而不是 dir 也可以解决这个问题;最坏的情况是你会运行一个不必要的 shell-inside-a-shell,这很愚蠢,但不会破坏简单的东西,比如 dir。
