paramiko exec_command“sudo -iu”挂起

时间:2017-05-21 08:39:31

标签: python paramiko

我正在使用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()

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

提前致谢, 塔尔

1 个答案:

答案 0 :(得分:1)

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

因此,运行sudo -i永远不会导致输出到stdout,因此您的循环将停留在I / O等待中,因此会挂起,就像您当前遇到的那样。永远不应该在脚本中使用sudo -i,它只应该用于交互式shell。

您有两种选择:

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