我有一些具有相同用户/密码组合的任意数量的服务器。我想写一个脚本(我调用一次)以便
ssh-copy-id user@myserver
为每个服务器调用。由于他们都有相同的用户/密码,这应该很容易,但ssh-copy-id
希望我每次都分别输入密码,这违背了我的脚本的目的。没有输入密码的选项,即ssh-copy-id -p mypassword user@myserver
.
如何编写一个脚本,在ssh-copy-id
要求时自动填写密码字段?
qua*_*nta 37
看看sshpass。将您的密码放在一个文本文件中,然后执行如下操作:
$ sshpass -f password.txt ssh-copy-id user@yourserver
Run Code Online (Sandbox Code Playgroud)
小智 23
您可以使用 expect 来监听密码提示并发送您的密码:
#!/usr/bin/expect -f
spawn ssh-copy-id $argv
expect "password:"
send "YOUR_PASSWORD\n"
expect eof
Run Code Online (Sandbox Code Playgroud)
保存脚本,使其可执行,并像这样调用它: ./login.expect user@myserver
小智 6
Quanta 的回答非常好,但它要求您将密码放在文本文件中。
从sshpass
手册页:
如果没有给出选项,sshpass 从标准输入读取密码。
因此,您可以做的是在脚本期间捕获一次密码,将其存储在一个变量中,回显密码并将其作为输入通过管道传输到 sshpass。
我一直这样做,而且效果很好。例子:
echo "Please insert the password used for ssh login on remote machine:"
read -r USERPASS
for TARGETIP in $@; do
echo "$USERPASS" | sshpass ssh-copy-id -f -i $KEYLOCATION "$USER"@"$TARGETIP"
done
Run Code Online (Sandbox Code Playgroud)