如何强制 ssh-copy-id 忽略现有的授权密钥?

如何强制 ssh-copy-id 忽略现有的授权密钥?

编辑:有一个对此的错误报告,相当于这个答案

我正在尝试编写将公钥复制到多台计算机的脚本。ssh-copy-id在复制之前检查它是否可以使用当前配置登录,但不幸的是,这IdentityFile包括~/.ssh/config.我想完全忽略~/.ssh/config;有什么办法可以做到这一点,或者强制ssh-copy-id始终添加密钥?这确实不是工作:

ssh-add "$old_key"
ssh-copy-id -i "$new_key" -o "IdentityFile $new_key" "$login"

这类似于但又不同如何让 ssh 忽略 .ssh/config?

答案1

检查了代码后ssh-copy-id,发现这个 hack 有效:

SSH_OPTS='-F /dev/null' ssh-copy-id [...]

不过,仍然对仅依赖于已记录功能的解决方案感兴趣。

答案2

的使用SSH_OPTS可能不是面向未来的(我认为出于安全原因,脚本应该在开始时重置它:行为不应该依赖于未指定的环境变量,在某些情况下这些变量可能还没有被清理)。你可以做什么(可能通过 shell 函数):

env PATH="/path/to/special_dir:$PATH" ssh-copy-id [...]

其中/path/to/special_dir只包含一个ssh脚本,它可以执行真实ssh-F /dev/null.这有点难看,但我认为当前的脚本没有任何干净的方法ssh-copy-id

相关内容