Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ssh/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
由于特殊的身份验证需要,为使用Python Paramiko传输类执行的命令(su)提供输入_Python_Ssh_Paramiko - Fatal编程技术网

由于特殊的身份验证需要,为使用Python Paramiko传输类执行的命令(su)提供输入

由于特殊的身份验证需要,为使用Python Paramiko传输类执行的命令(su)提供输入,python,ssh,paramiko,Python,Ssh,Paramiko,我使用Paramiko连接unix主机,目标是执行以下命令: whoami-->这将打印PAM功能帐户 hostname-->unix服务器的主机名 sudo su–(对于sudo,不需要密码,它会自动进入root用户)-->这将进入root用户 whoami-->这应该打印根目录 #1和#2命令工作正常,在标准输出响应中可以看到预期的结果 trans.auth_interactive(username='username', handler=handler) session = trans.o

我使用Paramiko连接unix主机,目标是执行以下命令:

  • whoami
    -->这将打印PAM功能帐户
  • hostname
    -->unix服务器的主机名
  • sudo su
    (对于sudo,不需要密码,它会自动进入root用户)-->这将进入root用户
  • whoami
    -->这应该打印根目录
  • #1和#2命令工作正常,在标准输出响应中可以看到预期的结果

    trans.auth_interactive(username='username', handler=handler)
    session = trans.open_session()
    stdout_data = None
    stderr_data = None
    
    (stdin, stdout, stderr) = session.exec_command("sudo su -")
    
    command = 'whoami'
    stdin.write(command + '\n')
    stdin.flush()
    
    result = stdout.readlines()
    print(result)
    output = str(result)
    print(output)
    print_hi('done')
    
    控制台日志

    INFO:paramiko.transport:Authentication(键盘交互)成功!
    调试:paramiko.transport:[chan 0]最大数据包长度:32768字节
    调试:paramiko.transport:[chan 0]最大数据包输出:32768字节
    调试:paramiko。传输:已打开Secsh通道0。
    调试:paramiko.transport:[chan 0]Sesch通道0请求正常
    回溯(最近一次呼叫最后一次):
    文件“C:/Users/tpukrisi/PycharmProjects/Paramiko/paramikoppam.py”,第77行,在
    连接pam主机()
    文件“C:/Users/tpukrisi/PycharmProjects/Paramiko/paramikoppam.py”,第21行,在connect_pam_host中
    (stdin、stdout、stderr)=session.exec_命令(“sudosu-”)
    TypeError:无法解压缩不可编辑的非类型对象
    调试:paramiko.transport:传输线程中的EOF
    
    进程已完成,退出代码为1

    谢谢
    Krishna

    低级
    通道.exec\u命令
    不返回任何内容(与高级
    SSHClient.exec\u命令不同)

    如果要获取I/O,必须调用
    Channel
    makefile*
    方法

    这是
    SSHClient.exec\u命令在内部执行的简化代码:

    chan = transport.open_session()
    chan.exec_command(command)
    stdin = chan.makefile_stdin("wb", bufsize)
    stdout = chan.makefile("r", bufsize)
    stderr = chan.makefile_stderr("r", bufsize)