how to do SSH with -t option using paramiko

放肆的年华 提交于 2019-12-12 04:36:20

问题


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

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!