通过 `ssh-copy-id` 中的 stdin 发送密码

通过 `ssh-copy-id` 中的 stdin 发送密码

我需要自动化一些身份部署,最好使用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标志来提供。

这种说法是错误的。我实际上已经从sudoman 那里读到了这面旗帜;

答案1

您可能想尝试安装 sshpass,并将您的调用更改为ssh-copy-id

sshpass -p "$TMP_PASS" ssh-copy-id user@host

答案2

您在哪里找到有关选项的信息-S?它做了完全不同的事情!它用于复用和控制路径。

SSH 不接受标准输入上的密码曾经,因此您应该在部署中预安装授权密钥(首选方式)或使用sshpassexpect脚本,如许多其他问题中所述。

答案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错误。

相关内容