通过RSA公钥(RSA Public Key)链接SSH实现免密登录

警告
本文最后更新于 2021-03-18,文中内容可能已过时。

记录如何免密链接SSH和Git SSH

git bash 可以很方便地生成:

ssh-keygen

中间会有一些让你设置密码什么的, 可以直接无视, 一路回车即是生成RSA公钥.

C:/User/{Username}/.ssh里有一些文件, 有:

  • id_ras
  • id_ras.pub
  • known_hosts

其中, id_ras 是私钥, id_ras.pub 即是公钥.

known_hosts 是记录远程服务器的主机地址用的, 第一次链接到某个主机, 他会提示你记录, 和我们的公私钥无关.

进入 ~ 目录, 创建 .ssh 文件夹并设置权限 700 (只有拥有者具有读, 写, 执行的权限)

cd ~
mkdir .ssh && chown 700 .ssh

.ssh 目录下创建 authorized_keys 文件并设置权限 600 (只有拥有者具有读, 写的权限)

cd .ssh/
touch authorized_keys && chmod 600 authorized_keys

新建一个文件 tmp.pub, 输入本地生成的 id_ras.pub 的内容. 或者直接上传 id_ras.pub 到该目录下.

然后在 authorized_keys 后追加 id_ras.pub 的内容. 完成后删除不需要的 id_ras.pub

cat tmp.pub >> authorized_keys
rm id_ras.pub

使用ssh链接root, 不用密码就成功啦.

git 用户为例, 因为之前一直失败了来着, 终于搞好了

git 远程也是使用ssh的, 就和我们ssh登录root是一个意思. 所以, 我们在 githome 目录下同意新建上述文件, 并增加内容:

cd /home/git
mkdir .ssh && chown 700 .ssh
cd .ssh/
touch authorized_keys && chmod 600 authorized_keys
rm id_ras.pub

然后

就失败了.

不管是 git push/pull 还是ssh登录git, 都会要求输入密码. Why?

回顾一下 $600$ 和 $700$, 我们用的是root创建的文件和文件夹, 权限的拥有者自然是root, 而不是git. 这就是我们失败的原因.

所以, 还需要多来一步:

cd /home/git
chown git:git .ssh
chown git:git .ssh/authorized_keys

用ssh登录git用户, 理论上来说已经不用密码了. 这时, git push/pull 也不用密码啦