【问题标题】:SSH using paramiko and exec_command [duplicate]使用 paramiko 和 exec_command 的 SSH [重复]
【发布时间】:2018-04-18 10:01:50
【问题描述】:

尝试使用 SSH 和 paramiko 从 Windows 服务器通过 SSH 连接到 Linux 远程连接,并使用以下代码“pwd”此服务器(我已将用户/密码和服务器 IP 从真实代码更改):

import paramiko
from paramiko import SSHClient, AutoAddPolicy
LOCAL_IP=IP
client = paramiko.SSHClient()
client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
client.connect(LOCAL_IP,username=username, password=password)
client.exec_command('pwd')

我得到以下结果:

(<paramiko.ChannelFile from <paramiko.Channel 0 (open) window=24576 -> <paramiko.Transport at 0x6716710L (cipher aes128-ctr, 128 bits) (active; 1 open channel(s))>>>,
 <paramiko.ChannelFile from <paramiko.Channel 0 (open) window=24576 -> <paramiko.Transport at 0x6716710L (cipher aes128-ctr, 128 bits) (active; 1 open channel(s))>>>,
 <paramiko.ChannelFile from <paramiko.Channel 0 (open) window=24576 -> <paramiko.Transport at 0x6716710L (cipher aes128-ctr, 128 bits) (active; 1 open channel(s))>>>)

SSH 连接已打开,我可以通过 linux 服务器上的 netstat 判断我正在尝试通过 SSH 连接到....

【问题讨论】:

  • 还有很多其他的。

标签: python ssh paramiko


【解决方案1】:

client.exec_command 返回一个 stdin、stdout 和 stderr 流的元组 - 您需要分配它们并在它们上调用 read() 以获取输出:

import paramiko
from paramiko import SSHClient, AutoAddPolicy
LOCAL_IP=IP
PORT=your_port
client = paramiko.SSHClient()
client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
client.connect(LOCAL_IP, PORT, username="username", password="password")
stdin, stdout, stderr = client.exec_command("pwd")
print(stdout.read())

【讨论】:

  • 谢谢,它可以工作。但是 stdin 和 stderr 呢?
  • 它们都是流 - stderr 是错误输出,如果需要,您可以写入 stdin 以在 exec_command 之后提供额外的输入
猜你喜欢
  • 1970-01-01
  • 2015-10-28
  • 1970-01-01
  • 2023-04-11
  • 2015-09-27
  • 2011-03-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多