需求: 在本地windows和ubuntu使用同一套rsa秘钥免密码登录Linux服务器,推送git代码

1. 生成你账户的rsa秘钥,如何生成ssh公钥

  • 本地win10,打开git bash终端,我用的是cmder
  • ssh-keygen -t rsa -C <your_email@example.com> # 生成你账户的rsa秘钥
  • 中间要你输入密码,不要输入,直接回车,3次回车,看到如下所示的图表示秘钥对已经生成
1
2
3
4
5
6
7
8
9
10
11
+---[RSA 2048]----+
| .o.. |
| ++o |
| .o++. |
| .E= .o |
| .S +. . . |
| o = .= .|
| = . .oo+ |
| .o *o*..oo |
| o++=+@=+o.oo|
+----[SHA256]-----+

2. 到代码托管网站添加公钥

生成的秘钥在C:\Users\你的用户名\.ssh目录下。id_rsa是私钥 id_rsa.pub是公钥
进入.ssh目录,cat id_rsa.pub,查看生成的公钥。复制此公钥(以ssh-rsa 开头,以你的邮箱结尾的字符串)
在代码仓库的设置页面添加此公钥

github的添加ssh公钥页面是 https://github.com/settings/keys
码云的是 https://gitee.com/profile/sshkeys
coding.net的是 https://coding.net/user/account/setting/keys

如果之前有添加过的公钥也没关系,可以添加多个,标题随便写。
添加好之后,可以使用命令
ssh -T git@github.com, # github
ssh -T git@gitee.com, # 码云
ssh -T git@git.coding.net, # 码市
这3条命令查看是否能够连接到对应网站的服务器。如果配置正确,会出现successful的信息。
添加公钥之后,就可以使用git@开头的仓库地址推送代码了。并且不需要输密码。它们的关系如下:

git@github.com:xxx/xxxx.git ==> https://github.com/xxx/xxxx.git
git@gitee.com:xxx/xxxx.git ==> https://gitee.com/xxx/xxxx.git
git@git.coding.net:xxx/xxxx.git ==> https://git.coding.net/xxx/xxxx.git

3. 配置本地ubuntu虚拟机ssh免密码登录远程服务器

.ssh目录下的id_rsaid_rsa.pub文件复制到本地ubuntu虚拟机中。放在.ssh目录下,并修改二者的权限为600.
chmod 600 ./id_rsa*
其实ubuntu下,可以使用命令ssh-keygen -t rsa
-t 是type,后面跟生成秘钥的类型,这个命令是生成rsa类型的秘钥。这里为了便于操作,直接复制生成好的秘钥对。
id_rsa私钥 和 id_rsa.pub公钥复制到远程服务器。
scp /home/<用户名>/.ssh/id_rsa* 用户名@服务器ip:/home/<用户名>/.ssh # (确保服务器的路径正确。如果没有.shh目录,先创建一个)
先密码登录服务器,进入~/.ssh/目录,
cat id_rsa.pub >>authorized_keys # 将公钥添加至authorized_keys文件(如果没有此文件,先创建)
更改 authorized_keys 文件的权限 chmod 600 authorized_keys
下次即可在有私钥的电脑上(win10和虚拟机中的ubuntu)免密码登录你的远程服务器了
如果失败,请检查ssh服务是否正常运行。