我正在尝试使用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
提前致谢。
答案 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