【问题标题】:paramiko exec_command "sudo -iu" hangsparamiko exec_command "sudo -iu" 挂起
【发布时间】:2017-05-21 08:39:31
【问题描述】:

我正在使用 Paramiko(新手)连接到 linux 服务器。我能够连接到服务器并执行不同的命令(例如“ls”、“uptime”)并读取结果。 但是,当尝试执行“sudo -iu”命令(不需要密码)时,Paramiko 挂起。以下是相关的代码行:

ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy (paramiko.AutoAddPolicy())
sh.connect (server, username='aaaa', password= 'bbbbb', key_filename='C:\\Users\\aaaa\\Documents\\paramiko_dsa_key')
        stdin, stdout, stderr = ssh.exec_command("sudo -iu aaauser")
        #stdin, stdout, stderr = ssh.exec_command("uptime")
        print stdout.read()

请注意,使用 Xshell 等已知 SSH 工具运行这些命令没有问题。

提前致谢, 塔尔

【问题讨论】:

    标签: python paramiko


    【解决方案1】:

    Paramiko 悬挂正是人们所期望的。当您执行sudo -i 时,会生成一个新的 shell,并且当前的 shell 进入 I/O 等待新生成的 shell 退出,此时控制权将返回到 Paramiko。

    因此,运行sudo -i 将永远不会导致输出到标准输出,因此您的循环将卡在 I/O 等待中,从而挂起,正如您目前所经历的那样。 sudo -i 不应该在脚本中使用,它应该只用于交互式 shell。

    你有两个选择:

    1. 将 SSH 守护程序配置为允许以用户 aaauser 的身份登录,并首先避免此问题。
    2. 使用sudo 以正常的非交互方式执行每个命令。

    【讨论】: