如何使用 paramiko 使用 -t 选项执行 SSH
how to do SSH with -t option using paramiko
我正在尝试登录到一些远程服务器并尝试获取系统信息。在此过程中,我在某些服务器中遇到了一个问题,在这些服务器中,实际上不需要密码来以 SUDO 的形式执行命令。为了克服这个问题并使脚本通用,提出了这样的选项 "sudo -k udisksctl status",即提供 -k 选项,以便每次请求密码时。
现在出现了另一个问题:尝试登录某些服务器时出现以下错误 "sorry you must have a tty to run sudo centos"。当用谷歌搜索时,我了解到使用 here
中的 -t 选项执行 ssh 的选项
所以我的问题是如何使用 paramiko 使用 -t 选项进行 SSH?或者如何克服这个问题?
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")
您可以使用get_pty
参数:
stdin, stdout, stderr = ssh.exec_command("sudo -k udisksctl status", get_pty=True)
虽然有一些副作用。使用 get_pty=True
,所有输出都将发送到 stdout
,因此您无法再从 stderr
获取数据。
我正在尝试登录到一些远程服务器并尝试获取系统信息。在此过程中,我在某些服务器中遇到了一个问题,在这些服务器中,实际上不需要密码来以 SUDO 的形式执行命令。为了克服这个问题并使脚本通用,提出了这样的选项 "sudo -k udisksctl status",即提供 -k 选项,以便每次请求密码时。
现在出现了另一个问题:尝试登录某些服务器时出现以下错误 "sorry you must have a tty to run sudo centos"。当用谷歌搜索时,我了解到使用 here
中的 -t 选项执行 ssh 的选项所以我的问题是如何使用 paramiko 使用 -t 选项进行 SSH?或者如何克服这个问题?
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")
您可以使用get_pty
参数:
stdin, stdout, stderr = ssh.exec_command("sudo -k udisksctl status", get_pty=True)
虽然有一些副作用。使用 get_pty=True
,所有输出都将发送到 stdout
,因此您无法再从 stderr
获取数据。