paramiko exec_command执行"sudo -iu"命令挂起

4

我正在使用 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)运行这些命令是没有问题的。
提前感谢, Tal
1个回答

5

Paramiko挂起是可以预料的。当你执行sudo -i时,会产生一个新的shell,当前的shell会进入I/O等待状态,直到新产生的shell退出,此时控制权将被交还给Paramiko。

因此,运行sudo -i永远不会在stdout输出结果,这样你的循环将一直处于I/O等待状态,从而导致挂起,就像你目前遇到的问题一样。 sudo -i 不应该用于脚本中,只应该用于交互式shell。

你有两个选择:

  1. 配置SSH守护程序允许用户aaauser登录,从而避免出现这种问题。
  2. 以正常的非交互方式使用sudo来执行每个命令。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接