我试图想出一个例子,我尝试使用一个需要sudo权限的命令,并尝试使用Paramiko在远程服务器上执行它但是不成功。程序和错误消息在下面给出
ip = server_hostname
userName = user1
passWord = password1
command = 'sudo hostname'
ssh = paramiko.SSHClient()
ssh.load_system_host_keys()
ssh.connect(ip, username=userName, password=passWord, port=22)
stdin, stdout, stderr = ssh.exec_command(command)
stdin.write('password\n')
stdin.flush()
print stderr.readlines()
错误信息如下:
['sudo: no tty present and no askpass program specified\n']
sudo密码输入是否有我缺少的东西?
答案 0 :(得分:0)
必须为进程分配tty,或伪tty。换句话说:会话必须是交互式会话。没有这样的tty(终端),ssh应该从哪里询问密码?
必须设置DISPLAY
环境变量并且" askpass"程序必须为ssh进程所知,通常在环境变量SSH_ASKPASS
中指定。该值必须指向一个可执行文件,一个帮助程序,它允许以对密码等机密信息有意义的方式输入密码。每个系统通常都安装了这样的实用程序,通常是不同的环境,如普通的X,GNOME或KDE。在这种情况下,ssh将尝试在DISPLAY中使用该实用程序作为X应用程序来请求密码。
在你的情况下,两种情况都不存在。通常情况下,远程shell不是由交互式会话直接控制,并且远程端没有安装可以在给定X显示器上使用的askpass帮助程序。