使用Mac Catalina 10.15.5的python 3.8.1上的Paramiko 2.7.1-paramiko sshclient将无法使用系统名称进行连接

时间:2020-06-29 15:12:42

标签: python paramiko

如上所述,在Mac上使用paramiko 2.7.1,python 3.8.1-在OSX终端中以管理员用户身份使用Catalina 10.15.5:

上周尝试并尝试连接,然后一时兴起尝试使用IP而不是系统名称进行连接。瞧!现在,它会连接并运行一个shell命令。之前只会超时-大概是尝试登录系统。

有问题的系统在我的本地网络上,并且是运行sshd的RPi盒。由于它是本地的,因此名称为“ pisystem.local”。我可以使用Mac ssh并连接到它,我可以按名称ping它,它返回正确的地址,但是尝试使用paramiko连接到'pisystem.local'只是超时。现在,通过VPN连接到我的办公室连接,我可以通过名称连接到另一个也是“ .local”的系统-testsystem.windowsdomain.local-很好。

我无法连接的名称在我的本地路由器DNS中,这是本地网络中DNS解析的“第一线”-即使连接了VPN。 (我也尝试过没有VPN的连接,那里也没有乐趣)。 paramiko显然只是不喜欢解析内部“ .local”名称的方式。

还有其他一些参数可以设置以允许连接到这种类型的DNS连接吗?这是我的“小蛋糕”代码的示例:

import paramiko
import getpass

user = input('Username: ')
pw = getpass.getpass()

client = paramiko.SSHClient()
client.set_missing_host_key_policy(paramiko.WarningPolicy())
client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
#client.connect('pisystem.local', username=user, password=pw, port=22)  # does NOT work
client.connect('<internal ipv4 address>', username=user, password=pw, port=22)  # WORKS

stdin, stdout, stderr = client.exec_command("ls -l")
lines = stdout.readlines()
print(lines)




好-我找到了一种“解决方法”,但仍然不明白为什么paramiko会解析一个地址,而不解析另一个地址。通过更改以下连接字符串:

client.connect('<internal ipv4 address>', username=user, password=pw, port=22)>

收件人:

client.connect(socket.gethostbyname("pisystem.local"), username=user, password=pw, port=22)

它将立即连接并执行随后传递的任何命令

当paramiko不起作用时,为什么此“修复”有效?

0 个答案:

没有答案