【发布时间】:2020-02-04 23:25:48
【问题描述】:
我有一个要运行的脚本。此脚本的目的是在服务器列表上运行单个或多个命令。运行时脚本无法解析hosts文件并报错:
ssh: 无法解析提供的主机名 nodename 或 servname,或未知
while read host;
do
echo server: $host
sshpass -p 'password' ssh -o "StrictHostKeyChecking no" admin@$host 'command'
done < /path/to/hosts.txt
hosts.txt包含需要连接的主机的IP地址列表,格式如下:
server 1
server 2
server 3
我尝试将服务器 IP 放入 "" 和 '' 和 ; 和 ,,但它们都给出了相同的错误。
有人可以解释我在这里做错了什么吗?
【问题讨论】:
-
确保您的系统可以解析主机名。没有ssh问题。对于您的下一个问题:将选项
-n添加到您的 ssh 命令。 -
我可以通过 ssh 从我的系统登录到每个主机,并且可以很好地解析为主机名,但是当我输入服务器 IP 列表时,脚本只能执行第一个 ip 并运行命令在列表中的第一个 IP 上,但不解析列表的其余部分。
-
您似乎已经发布了您的脚本的编辑伪代码版本以及虚拟数据和审查输出。这使得调试变得困难。您能否创建一个不需要隐藏任何代码或数据的新脚本,然后运行它并发布完整的、未修改的脚本及其所有输出?
-
检查 hosts.txt 中的特殊字符(DOS/Windows 换行符):
cat -A hosts.txt -
@Cyrus 在 hosts 文件中没有特殊字符。由于某种原因,它读取第一台主机并在第一台主机上执行命令,然后停止读取其余主机。