【发布时间】:2018-06-29 14:24:11
【问题描述】:
我是帕拉米科的新手。我正在尝试创建一个简单的脚本,允许任何人使用他们的 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
关于我可能做错了什么有什么想法吗?
【问题讨论】:
-
您在the documentation 的什么地方看到
exec_command返回标准输入、标准输出和标准错误的元组?相反,它表示命令的 I/O 已连接到通道。显然,它返回None. -
@kindall 我认为他正在阅读客户文档:'Returns: the stdin, stdout, and stderr of the executing command, as a 3-tuple'
-
@MoxieBall 但是 OP 调用
Channel.exec_command,而不是SSHClient.exec_command- 实际上是 OP 代码的两个问题之一,请参阅我的答案。 -
啊哈。没有意识到客户端和服务器 API 如此不同。
-
顺便说一句,Paramiko 只是客户端库。
Channel和SSHClient都是客户端类
标签: python python-3.x ssh paramiko