通过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
是记录远程服务器的主机地址用的, 第一次链接到某个主机, 他会提示你记录, 和我们的公私钥无关.
服务器上传公钥
root
进入 ~
目录, 创建 .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, 不用密码就成功啦.
非root
以 git
用户为例, 因为之前一直失败了来着, 终于搞好了
git
远程也是使用ssh的, 就和我们ssh登录root是一个意思. 所以, 我们在 git
的 home
目录下同意新建上述文件, 并增加内容:
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
也不用密码啦