【问题标题】:how to do SSH with -t option using paramiko如何使用 paramiko 使用 -t 选项进行 SSH
【发布时间】:2017-03-30 15:47:39
【问题描述】:

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

现在发生了一个不同的问题:尝试登录某些服务器时出现以下错误“抱歉,您必须有一个 tty 才能运行 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")

【问题讨论】:

    标签: python linux ssh paramiko


    【解决方案1】:

    可以使用get_pty参数:

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

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

    【讨论】:

    • 能否请您添加一些有关 get_pty 在此特定命令中所做的事情的更多信息..
    • 就像ssh -t一样,它要求远程ssh服务器分配一个pty(伪终端)。
    猜你喜欢
    • 2012-12-01
    • 2023-03-08
    • 1970-01-01
    • 2012-01-13
    • 1970-01-01
    • 2017-12-23
    • 2023-03-25
    • 1970-01-01
    相关资源
    最近更新 更多