【发布时间】:2021-10-07 12:24:15
【问题描述】:
我写这个是为了自动从列表中添加 SSH 连接,但是当我运行这个脚本时出现错误!我认为这个问题与从脚本中的$line 变量读取 ip 有关。
我的脚本:
#!/bin/bash
filename='iplist.txt'
n=1
USER=root
SSHPASS=123456
while read line; do
echo "No. $n : IP = $line"
echo "yes \n" | sshpass -p "$SSHPASS" \
ssh-copy-id -o StrictHostKeyChecking=no $USER@$line \
&& echo "Add successfully!" || echo "FAILED"
echo "########################################"
n=$((n+1))
sleep 2
done < $filename
iplist.txt 是一个包含我的 IP 的文件:
172.25.25.1
172.25.25.2
这是我的脚本的结果:
No. 1 : IP = 172.25.25.1
/usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "/root/.ssh/id_rsa.pub"
/usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed
: Name or service not known: ssh: Could not resolve hostname 172.25.25.1
FAILED
########################################
No. 2 : IP = 172.25.25.2
/usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "/root/.ssh/id_rsa.pub"
/usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed
: Name or service not known: ssh: Could not resolve hostname 172.25.25.2
FAILED
########################################
【问题讨论】:
-
在您的脚本中输入一个有效的
shebang并将其粘贴到shellcheck.net 以进行验证/建议。 -
避免大写变量,因为内部/环境变量都是大写的。就像您的示例中的
USER一样,对内置read使用不同的fd,使用更多引号等等...... -
@Jetchisel THX,但您的 cmets 无法解决我的问题。
-
@Jetchisel 如果我设置例如
line=172.25.25.1我的脚本运行成功但无法从文件中读取! -
Los like windows to Linux issue...