Python Paramiko exec_命令失败,';非类型';对象是不可编辑的

Python Paramiko exec_命令失败,';非类型';对象是不可编辑的,python,python-3.x,ssh,paramiko,Python,Python 3.x,Ssh,Paramiko,我是帕拉米科的新手。我试图创建一个简单的脚本,允许任何人使用他们的Linux凭据来运行该命令。我决定用一个简单的ls命令进行测试,但我收到了错误 import paramiko username = *<USERNAME>* hostname = *<HOSTNAME>* port = 22 trans = paramiko.Transport((hostname,port)) trans.connect(username=username, password=passw

我是帕拉米科的新手。我试图创建一个简单的脚本,允许任何人使用他们的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()
导入paramiko
用户名=**
主机名=**
端口=22
trans=paramiko.Transport((主机名,端口))
trans.connect(用户名=用户名,密码=密码)
信道=传输开放信道(“会话”)
打印(channel.send_ready())
打印(channel.get_transport())
stdin,stdout,stderr=channel.exec_命令(“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
TypeError回溯(最近一次调用)
在()
6传输连接(用户名=用户名,密码=密码)
7频道=传输开放频道(“会话”)
---->8 stdin,stdout,stderr=channel.exec_命令(“ls-lah”)
TypeError:“非类型”对象不可编辑
有没有关于我可能做得不对的想法

  • SSH中没有
    会话
    通道(除非您的服务器实现了一些非标准通道)。有
    sftp
    shell
    exec
    频道

    您想使用
    exec
    频道

  • 您不需要在Paramiko中显式打开
    exec
    通道。就用吧

    SSHClient.exec_命令
    (与
    Channel.exec_命令
    相反)返回3-tople

  • 例如,见:


    您在
    exec_命令中看到了什么
    返回标准输入、标准输出和标准错误的元组?相反,它表示命令的I/O连接到通道。很明显,它返回
    None
    @kindall我想他正在阅读客户机文档:@MoxieBall但是OP调用
    频道。exec_命令
    ,而不是
    SSHClient.exec_命令
    ——OP代码的两个问题中的一个,请看我的答案。啊哈。没有意识到客户端和服务器API如此不同。顺便说一句,Paramiko只是客户端库。
    Channel
    SSHClient
    都是客户端类
    s = paramiko.SSHClient()
    s.load_system_host_keys()
    s.connect(hostname, port, username, password)
    command = 'ls -lah'
    (stdin, stdout, stderr) = s.exec_command(command)