Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sqlite/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Paramiko-如何判断SSHClient当前连接到哪个主机?_Python_Paramiko - Fatal编程技术网

Python Paramiko-如何判断SSHClient当前连接到哪个主机?

Python Paramiko-如何判断SSHClient当前连接到哪个主机?,python,paramiko,Python,Paramiko,我有一个脚本,可以循环十几台主机,并在每台主机上执行几个函数。这些函数将SSHClient()作为参数,然后对其执行命令 我可以简单地在SSHClient()上设置一些属性,但在此之前,是否已经有一种方法可以从SSHClient()的实例确定当前连接到哪个主机 for host in hosts: ssh = paramiko.SSHClient() ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) ssh

我有一个脚本,可以循环十几台主机,并在每台主机上执行几个函数。这些函数将
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)
    ...

在客户端使用ssh变量时,正如您所做的那样,有:

ssh.get_transport().getpeername()
它将返回一个元组
('ip address',portnumber)


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

以下可能是您想要的

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

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

不幸的是,我这样做是为了打印出人类可读的主机名,以供参考。我可以将IP解析为主机名,但向客户端添加属性更容易。是的,除了
gss\u host
,我没有看到在客户端或传输中存储主机名,但这只是在您使用gss的情况下。对于您的用例,有什么有用的东西吗?酷,我来看看;我不知道面料。