在脚本中使用 ssh-copy-id 命令时出现问题
Problem when using the ssh-copy-id command in script
我写这个是为了自动从列表中添加 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
########################################
- 检查文件结尾,如果它们是 windows 的 CRLF,mac 的 CR,或 linux.
的 LF
- 同时读取-r行;执行命令;完毕
传递给 read 命令的 -r 选项可防止解释反斜杠转义。
在读取命令之前添加 IFS= 选项以防止 leading/trailing 空格被修剪 -
while IFS= read -r line; do COMMAND_on $line; done
上面的代码是一个示例,您可能需要使用-r 参数。对于 IFS 你可能不想使用它,因为如果有任何空格,那么 IFS 会保留它而不是删除它们。
我写这个是为了自动从列表中添加 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
########################################
- 检查文件结尾,如果它们是 windows 的 CRLF,mac 的 CR,或 linux. 的 LF
- 同时读取-r行;执行命令;完毕
传递给 read 命令的 -r 选项可防止解释反斜杠转义。
在读取命令之前添加 IFS= 选项以防止 leading/trailing 空格被修剪 -
while IFS= read -r line; do COMMAND_on $line; done
上面的代码是一个示例,您可能需要使用-r 参数。对于 IFS 你可能不想使用它,因为如果有任何空格,那么 IFS 会保留它而不是删除它们。