问题
I am trying to login to some remote servers and trying to fetch the system info. During that process I have faced an issued in some of the servers, where the password is not really required to execute commands as SUDO. To overcome this issue and make the script generic came up with option like this "sudo -k udisksctl status", i.e providing -k option so that everytime it requests for a password.
Now a different problem has occured : When trying to login to some of the servers the following error is occuring "sorry you must have a tty to run sudo centos". When googled out came to know about the option of doing ssh with -t option from here
So my Question is how to do SSH with -t option using paramiko ? Or How to overcome this problem ?
import paramiko
import pprint
ip_list = [
["192.168.11.44", "root", "aaa", "aaa"],
["192.168.11.6", "root", "bbb", "bbb"]
]
os_check_list = ["DISTRIB_DESCRIPTION"]
os = None
ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
for ip in ip_list:
ssh.connect(ip[0], username = ip[1], password = ip[2])
stdin, stdout, stderr = ssh.exec_command("sudo -k udisksctl status")
stdin.write(ip[3]+"\n")
回答1:
You can use the get_pty
parameter:
stdin, stdout, stderr = ssh.exec_command("sudo -k udisksctl status", get_pty=True)
There's some side effect though. With get_pty=True
, all output will be sent to stdout
and so you cannot get data from stderr
any more.
来源:https://stackoverflow.com/questions/43111173/how-to-do-ssh-with-t-option-using-paramiko