我有一个循环遍历十几个主机的脚本,并在每个主机中执行多个功能。这些函数将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)
...
答案 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,取回返回的输出并将其从字节格式更改为字符串格式,最后去掉尾随的换行符。