无法使用从paramiko中的文件读取的主机名进行连接

时间:2015-09-15 20:12:35

标签: python ssh paramiko

我正在尝试使用paramiko连接到节点列表(主机名),并且在尝试连接时我收到了socket.gaierror。它正在从文件中读取主机名,但是当它尝试连接时,我得到了一个gaierror。

import paramiko
import socket

f = open('<filename>', 'r')

 for node in f.readlines():
    try:
        ssh = paramiko.SSHClient()
        ssh.load_system_host_keys()
        ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
        print('Connecting to %s.' % node)
        node.strip()
        ssh.connect(node, username=user,password=passw)
        print('Connected to %s.' % node)
        stdin, stdout, stderr = ssh.exec_command(cmd)
        ssh.close()

    except socket.gaierror:
        print('Unable to connect to %s.' % node)
        pass

其中包含主机名的文件只列出了每行一个主机名。例如:

主机名1
主机名2
hostname3
等...

但是,如果我从for循环中取出代码并将主机名分配给变量,那么它就可以工作。

import paramiko
import socket

node = '<hostname>'

try:
    ssh = paramiko.SSHClient()
    ssh.load_system_host_keys()
    ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
    print('Connecting to %s.' % node)
    node.strip()
    ssh.connect(node, username=user,password=passw)
    print('Connected to %s.' % node)
    stdin, stdout, stderr = ssh.exec_command(cmd)
    ssh.close()

except socket.gaierror:
    print('Unable to connect to %s.' % node)
    pass

提前致谢。

1 个答案:

答案 0 :(得分:0)

尝试使用universal newline support(&#39; rU&#39;)打开文件,以确保它没有获得回车。

修改:另外,将node.strip()作为参数添加到ssh.connect()来电。 strip()电话不在原地。我编辑了代码示例以反映这一点:

import paramiko
import socket

with open('<filename>', 'rU') as f:

    for node in f.readlines():
        try:
            ssh = paramiko.SSHClient()
            ssh.load_system_host_keys()
            ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
            print('Connecting to %s.' % node)
            ssh.connect(node.strip(), username=user,password=passw)
            print('Connected to %s.' % node)
            stdin, stdout, stderr = ssh.exec_command(cmd)
            ssh.close()

        except socket.gaierror:
            print('Unable to connect to %s.' % node)
            pass