我正在尝试编写将公钥复制到多台计算机的脚本。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
。