Paramiko - 如何判断SSHClient当前连接的主机?

时间:2016-01-26 22:20:32

标签: python paramiko

我有一个循环遍历十几个主机的脚本,并在每个主机中执行多个功能。这些函数将SSHClient()作为参数,然后对其执行命令。

我可以简单地在SSHClient()上设置一些属性,但在我这样做之前,是否已经有办法从SSHClient()的实例确定哪个主机当前正连接到哪个?

for host in hosts:
    ssh = paramiko.SSHClient()
    ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
    ssh.connect(host, username=USERNAME)
    f1(ssh)
    f2(ssh)
    ...

2 个答案:

答案 0 :(得分:3)

使用客户端的ssh变量,就像你所做的那样:

ssh.get_transport().getpeername()

将返回('ip address', portnumber)

的元组

这还够吗?查看paramiko / client.py的源代码,它似乎没有记录connect()的hostname参数的值,它使用socket.getaddrinfo查找地址,然后传递结果运输,这是getpeername()所要求的。

答案 1 :(得分:0)

以下可能是您所追求的...

stdin, stdout, stderr = ssh.exec_command('hostname')
hostname = stdout.read().decode("utf-8").strip('\n')
print(hostname)

工作原理:
在任何 windows 和 linux 上,如果您在任何终端上键入 hostname,那么您将返回服务器名称。我们在远程执行这个 cmd,取回返回的输出并将其从字节格式更改为字符串格式,最后去掉尾随的换行符。