我正在使用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)运行这些命令没有问题。
提前致谢, 塔尔
答案 0 :(得分:1)
Paramiko悬挂正是所期待的。执行sudo -i
时,会生成一个新shell,当前shell进入I / O等待,直到新生成的shell退出,此时控制权将转回Paramiko。
因此,运行sudo -i
永远不会导致输出到stdout,因此您的循环将停留在I / O等待中,因此会挂起,就像您当前遇到的那样。永远不应该在脚本中使用sudo -i
,它只应该用于交互式shell。
您有两种选择:
aaauser
身份登录,并首先避免此问题。sudo
执行每个命令。