【发布时间】:2015-08-13 19:02:47
【问题描述】:
我知道要让 paramiko 的 ssh 连接正常工作,我需要在 Windows 上安装 cygwin。目标是从 Linux 远程运行命令到 Windows 服务器,然后在 Linux 服务器或 Windows 本身上再次处理输出。
我很困惑,因为使用 "ssh_obj.exec_command("ipconfig")" 从 Linux 发送到 Windows 的 "ipconfig" 有效,但 "ssh_obj.exec_command("dir")" 无效 - 尝试给出类似 "cd C: \Users\Administrator" 用于 cmd 或 "cd C:",后跟 Cygwin 中的 "cd Users/Administrator"。它们都不起作用。
那么当我使用 Windows 远程发送命令时 paramiko 使用什么?有人知道吗?
【问题讨论】:
-
paramiko 发送
MSG_CHANNEL_REQUEST以获得"exec"。它的执行方式取决于服务器。可能 Cygwin 的 sshd 守护进程派生了一个新进程并执行/bin/sh -c command。它不会使用 cmd.exe。ipconfig成功是因为它不是 cmd shell 内部命令,而是 ipconfig.exe。如果您想与 shell 交互,请改为调用invoke_shell。这会发送一个"shell"请求。 -
但是invoke_shell也和exec_command一样在打开通道后只返回一个对象。我希望将“dir”的输出提供给我
-
调用 shell 后,您可以
send命令和recv输出。dir不能在 POSIX shell 中工作;使用send('ls\n')。我想你可以运行cmd,但我不知道你为什么要这样做。 -
我不确定您希望我如何尝试。你能给我一个两行代码的例子——利用我在第一篇文章顶部的内容吗?谢谢~
-
ssh = paramiko.SSHClient(); ssh.connect(hostname, username, password);chan = ssh.invoke_shell();chan.send('ls\n');while not chan.recv_ready(): pass;output = chan.recv(10000).
标签: windows command cygwin command-line-interface paramiko