ssh-copy-id 与手动复制 id_rsa.pub

ssh-copy-id 与手动复制 id_rsa.pub

日复一日,我们公司的服务器开始询问我的 SSH 密码。

我检查的第一件事是查看我的密钥是否在.ssh/authorized_keys服务器内。我的钥匙在里面,没有任何变化。也/etc/ssh/sshd_config没有任何改变。

然后我尝试做这个程序在新安装的 Ubuntu16 服务器上。完成这 5 个步骤后,新服务器再次询问我 SSH 密码。

ssh-copy-id命令终于完成了无密钥 SSH 登录,但我注意到它.ssh/authorized_keys有三行:一行以 开头ssh-dss,两行以ssh-rsa

现在我记得上面链接中的 5 个步骤程序过去只用一把钥匙就可以工作。

最近有什么变化吗?为什么上面的过程不再起作用?

编辑:由于ssh-copy-id总共将 3 个密钥复制到.ssh/authorized_keys这些密钥,可以在以下文件中找到:

~/.ssh/id_dsa

~/.ssh/sshkey.pub

~/.ssh/id_rsa.pub

.ssh/authorized_keys所以我从远程文件中逐行删除

删除~/.ssh/id_dsa行-自动登录成功

删除~/.ssh/id_rsa.pub行-自动登录成功

已删除~/.ssh/sshkey.pub行-自动登录不是成功 - 要求输入密码

仅来自的内容~/.ssh/sshkey.pub是必要的。为什么 SSH 是比较的sshkey.pub而不是id_rsa.pub像在线教程的示例中那样?

答案1

看起来这ssh-copy-id只是一个方便的功能。它检查密钥是否已导出到计算机,.ssh如有必要,它会创建目录,但基本上它只是将公钥添加到.ssh/authorized_keys.ssh-copy-id是一个shell脚本(在openssh中),所以你可以vi `which ssh-copy-id`在最后阅读它的代码():

[ "$DRY_RUN" ] || printf '%s\n' "$NEW_IDS" | \
  ssh "$@" "exec sh -c 'cd ; umask 077 ; mkdir -p .ssh && { [ -z "'`tail -1c .ssh/authorized_keys 2>/dev/null`'" ] || echo >> .ssh/authorized_keys ; } && cat >> .ssh/authorized_keys || exit 1 ; if type restorecon >/dev/null 2>&1 ; then restorecon -F .ssh .ssh/authorized_keys ; fi'" \
  || exit 1

仅在身份验证期间authorized_keys进行检查。来自openssh文档:

文件 ~/.ssh/authorized_keys 列出了允许登录的公钥。当用户登录时,ssh 程序告诉服务器它要使用哪个密钥对进行身份验证。客户端证明它有权访问私钥,服务器检查相应的公钥是否有权接受该帐户。

我希望这能回答您的问题标题“ssh-copy-id 与手动复制 id_rsa.pub”。~/.ssh/sshkey.pub我没有这个文件,所以我希望你自己解决设置问题。无论如何,是的,您可以手动将公钥复制到authorized_keys不使用ssh-copy-id.

UPD:2020 年(OpenSSH 8.2)RSA SHA-1 密钥已弃用。应使用替代方案(请参阅链接)。

相关内容