读取文件主机名用Paramiko连接失败,直接传入可正常连接
解决Paramiko遍历主机文件连接时的
socket.gaierror问题 嗨,我刚碰到过一模一样的问题!你这个socket.gaierror: [Error -2] Name or service unknown报错的根源其实很简单——读取文件时每行末尾带了换行符。
你看,当用for line in f遍历文件内容时,每一行的末尾都会保留换行符(\n)。比如你hosts.txt里的test-r-1,读出来的line实际是'test-r-1\n',带着这个换行符的字符串作为主机名去DNS解析,系统当然找不到对应的服务,自然报错。而你直接写"test-r-1"的时候,这个字符串是没有换行符的,所以解析完全正常。
解决方案
只需要在使用每行内容前,去掉首尾的空白字符(包括换行符)就行,用Python的strip()方法就可以搞定:
with open("hosts.txt", "r") as f: for line in f: # 去掉换行符和首尾多余空白 hostname = line.strip() # 跳过空行,避免无效连接尝试 if hostname: remote_conn.connect(hostname, username=username, password=password, look_for_keys=False, allow_agent=False)
如果你担心strip()会误删主机名前后的合法空格(不过一般主机名不会有空格),也可以只去掉换行符:
hostname = line.rstrip('\n')
这样修改后,遍历文件里的主机名就和你直接写字符串的效果完全一样了,应该就能正常连接啦!
内容的提问来源于stack exchange,提问作者Stanford Hazlebruth
相关产品推荐
相关产品推荐

