如何使用paramiko

时间:2017-03-30 07:25:19

标签: python linux ssh paramiko

我正在尝试登录某些远程服务器并尝试获取系统信息。在这个过程中,我遇到了一些在一些服务器中发布的服务器,其中不需要密码来执行SUDO命令。为了克服这个问题并使脚本通用,提出了像“sudo -k udisksctl status”这样的选项,即提供-k选项,以便每次请求密码时。

现在出现了另一个问题:当尝试登录某些服务器时,发生以下错误“抱歉,您必须有一个tty才能运行sudo centos”。当用Google搜索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")

1 个答案:

答案 0 :(得分:1)

您可以使用get_pty参数:

stdin, stdout, stderr = ssh.exec_command("sudo -k udisksctl status", get_pty=True)

虽然有一些副作用。使用get_pty=True,所有输出都会发送到stdout,因此您无法再从stderr获取数据。