python - Paramiko SSH 连接错误 : socket. gaierror : [Errno 8] nodename nor servname provided, or not known

标签 python eclipse ssh macos-sierra paramiko

我在使用 Python 和 Paramiko 时遇到了一些问题。我想连接到 SSH 服务器以自动读取来自不同系统的一些信息。

我尝试了在这里找到的一些提示,但没有任何效果。我检查了主机文件,使用 brew 重新安装 Python,更新/升级 Python 和 Paramiko,使用我本地主机上的 ssh-server 进行测试。还运行 pip 来更新 paramiko 和 python。

我很困惑。请让我问你。

这是我的工作环境:

  • MacOS Sierra 10.12.6
  • python 2.7
  • eclipse
  • SSH 库:Paramiko (paramiko-2.2.1-py2.py3-none-any.whl)

脚本:基本的 Paramiko SSH 连接

'''
Created on 16.09.2017


'''
import sys
import telnetlib
import paramiko


host = '213.000.000.123'    # 
user = "user"
password = "password"

ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect(host, user, password)

在 Eclipse 上运行脚本会产生以下输出:

Traceback (most recent call last):
      File "/Users/tschaefer/Documents/workspace/PythonCMTSLibs/basicSSHSessionModule.py", line 17, in <module>
        ssh.connect(host, user, password)
      File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/paramiko/client.py", line 301, in connect
        to_try = list(self._families_and_addresses(hostname, port))
      File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/paramiko/client.py", line 199, in _families_and_addresses
        hostname, port, socket.AF_UNSPEC, socket.SOCK_STREAM)
    socket.gaierror: [Errno 8] nodename nor servname provided, or not known

好的,我找到了 gai=getaddrinfo,还有 getaddrbyname 等等。所以我认为将主机字符串解析为 IP 地址存在问题。但是将 IP 地址解析为 IP 地址是没有意义的。我使用了显式 IP。 直接在 CLI 上使用“ssh 213.000.000.123”命令工作正常。

我还尝试连接到“localhost”或“127.0.0.1”或“google.com”或其他。 hosts-file-entry 没有注释,所以它是事件的。结果:同样的情况。

NSLOOKUP 工作正常,因此 DNS 查找工作正常并且 DNS 服务器可用。

在Eclipse中Python似乎可以找到启动的paramiko Library,但是这个Library有问题。

谁能帮我看看我的眼睛看不到的东西。

非常感谢!

问候

最佳答案

错误信息非常具有误导性。它实际上与 DNS 错误无关。

显然 paramiko 使用的默认端口不是 22。一旦我指定了一个端口,问题就消失了。

port = 22
k = paramiko.RSAKey.from_private_key_file(key_filename)
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
hostname = os.environ['DOCKER_EE_MANAGER_NODE']
username = os.environ['UCP_USER']

ssh.connect(hostname, port, username, pkey = k)

有效!享受吧!

关于python - Paramiko SSH 连接错误 : socket. gaierror : [Errno 8] nodename nor servname provided, or not known,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46264064/

相关文章:

python - Pyodbc-如果表存在则不要在 SSMS 中创建

Android - 单击按钮关闭 Activity

SSH 添加 : could not add identity xxx agent refused operation

bash - 如何杀死多台计算机上某个用户的所有进程?

python - 计数向量化器中是否可以有无序二元组

java - 大规模机器学习——Python 还是 Java?

Python复制和连接链表,保持顺序

java - WindowBuilder 添加了很多不需要的空标签

android - 如何在 Eclipse AVD 中使用 Android 手机边框获取屏幕截图?

java - 使用 Jsch 在远程 EC2 实例上创建文件夹