![通过 `ssh-copy-id` 中的 stdin 发送密码](https://linux22.com/image/73087/%E9%80%9A%E8%BF%87%20%60ssh-copy-id%60%20%E4%B8%AD%E7%9A%84%20stdin%20%E5%8F%91%E9%80%81%E5%AF%86%E7%A0%81.png)
我需要自动化一些身份部署,最好使用ssh-copy-id
.
我试图通过标准输入提供密码,这可以ssh
通过使用-S
标志来提供。我知道我可以发送其他选项来在命令中ssh
使用该-o
标志ssh-copy-id
,但是手册页中没有该标志的使用示例。
所以我尝试ssh-copy-id
使用以下命令通过 stdin 传递 SSH 密码:
$# echo $TMP_PASS | ssh-copy-id -p2222 -i key.pub user@host -o "-S"
但我得到的只是:
/bin/ssh-copy-id: ERROR: command-line: line 0: Bad configuration option: -s
编辑:
我试图通过标准输入提供密码,这可以
ssh
通过使用-S
标志来提供。
这种说法是错误的。我实际上已经从sudo
man 那里读到了这面旗帜;
答案1
您可能想尝试安装 sshpass,并将您的调用更改为ssh-copy-id
:
sshpass -p "$TMP_PASS" ssh-copy-id user@host
答案2
您在哪里找到有关选项的信息-S
?它做了完全不同的事情!它用于复用和控制路径。
SSH 不接受标准输入上的密码曾经,因此您应该在部署中预安装授权密钥(首选方式)或使用sshpass
或expect
脚本,如许多其他问题中所述。
答案3
2020 / Mac OS X(将我的答案复制粘贴到所以)
安装sshpass(原答案)
brew install hudochenkov/sshpass/sshpass
使用 sshpass 并将密码作为参数运行 ssh-copy-id
sshpass -p $MYPASSWORD ssh-copy-id -i ~/PATH/TO/KEY $USER@$HOST -p $PORT
如果您还想关闭严格的主机检查,请使用-o
传递给底层 ssh 的标志:
sshpass -p hunter2 ssh-copy-id -o StrictHostKeyChecking=no -i ~/PATH/TO/KEY $USER@$HOST -p $PORT
我尝试了@redneb的解决方案,并setsid
通过以下方式通过util-linux安装这个答案,但不断收到密码被拒绝的信息。
我发现这个策略可以在成功设置多个树莓派的同时上传我的 SSH 密钥。在我的脚本中,我也ssh-keygen -R raspberrypi.local
每次都运行,以避免The ECDSA host key for raspberrypi.local has changed
错误。