Paramiko exec_command失败,'NoneType'对象不可迭代

问题描述 投票:2回答:1

我是Paramiko的新手。我试图创建一个简单的脚本,允许任何人使用他们的Linux凭据来运行命令。我决定用一个简单的ls命令测试,但我收到错误。

import paramiko
username = *<USERNAME>*
hostname = *<HOSTNAME>*
port = 22
trans = paramiko.Transport((hostname,port))
trans.connect(username=username, password=password)
channel = trans.open_channel("session")
print(channel.send_ready())
print(channel.get_transport())
stdin,stdout,stderr = channel.exec_command("ls -lah")
trans.close()

我收到以下错误:

TypeError                                 Traceback (most recent call last)
<ipython-input-28-ce837beea6fe> in <module>()
      6 trans.connect(username=username, password=password)
      7 channel = trans.open_channel("session")
----> 8 stdin,stdout,stderr = channel.exec_command("ls -lah")

TypeError: 'NoneType' object is not iterable

关于我可能做错什么的任何想法?

python python-3.x ssh paramiko
1个回答
1
投票
  1. SSH中没有session通道(除非您的服务器实现了一些非标准通道)。有sftpshellexec频道。 你想使用exec频道。
  2. 而你不需要在Paramiko中明确地打开exec频道。只需使用SSHClient.exec_command methodSSHClient.exec_command(与Channel.exec_command相反)返回3-touple。

请参阅python paramiko run command

s = paramiko.SSHClient()
s.load_system_host_keys()
s.connect(hostname, port, username, password)
command = 'ls -lah'
(stdin, stdout, stderr) = s.exec_command(command)
© www.soinside.com 2019 - 2024. All rights reserved.