创建 SSH key

 1zhangcong@zhangcongdeMacBook-Pro ~ % cd ~/.ssh
 2zhangcong@zhangcongdeMacBook-Pro ~ % ls
 3id_rsa          id_rsa.pub      known_hosts
 4
 5zhangcong@zhangcongdeMacBook-Pro ~ % ssh-keygen -t rsa -C "conggege325@qq.com"
 6Generating public/private rsa key pair.
 7Enter file in which to save the key (/Users/zhangcong/.ssh/id_rsa): 
 8Enter passphrase (empty for no passphrase): 
 9Enter same passphrase again: 
10Your identification has been saved in /Users/zhangcong/.ssh/id_rsa.
11Your public key has been saved in /Users/zhangcong/.ssh/id_rsa.pub.
12The key fingerprint is:
13SHA256:LbktgNVOkabvADERtlCv4ORTpGbeiaCf41FgbzdpSCY conggege325@qq.com
14The key's randomart image is:
15+---[RSA 3072]----+
16|  ..*o  ..       |
17|   =oo .o.       |
18|. E =oooo        |
19|.X @.*.+ o       |
20|. * X.*.S .      |
21| . = o.o.+       |
22|  =    oo .      |
23| . o    ..       |
24|  .              |
25+----[SHA256]-----+

代码参数含义:

  • -t 指定密钥类型,可选,常用的密钥类型是 rsa (默认)和 ed25519

    rsa:最常用的公钥加密算法,使用极其广泛,并且支持较好。密钥位数越多,安全性越好,但是性能会有所降低,常见的有 RSA 2048 和 RSA 4096 等。

    ed25519:椭圆曲线算法生成的密钥,密钥长度短,安全可靠并且具有高性能。它的安全性在 RSA 2048 与 RSA 4096 之间,但是性能却在数十倍以上。(推荐使用)

  • -C 设置注释文字,比如邮箱

  • -f 指定密钥文件存储文件名。可选,默认生成 id_rsa 和 id_rsa.pub 两个秘钥文件。例如,执行:

ssh-keygen -t rsa -C “conggege325@qq.com” -f ~/.ssh/gitee.com

会在 ~/.ssh 下生成 gitee.com 和 gitee.com.pub 两个秘钥文件

接着又会提示输入两次密码(为了秘钥的安全性);当然为了使用时方便,你也可以不输入密码,直接按回车。

把公钥拷贝到远程服务器上

将公钥考到目标机器的用户目录下(为了避免id_rsa.pub文件冲突,建议复制的时候重命名),并将公钥里面的内容到追加到 ~/.ssh/authorized_keys 文件中

1zhangcong@zhangcongdeMacBook-Pro ~ % scp id_rsa.pub root@172.16.2.130:~/.ssh/id_rsa.conggege325.pub
2
3# 登录远程机器,把公钥拷贝到 ~/.ssh/authorized_keys 中
4zhangcong@zhangcongdeMacBook-Pro ~ % ssh root@172.16.2.130
5root@172.16.2.130's password: 
6Last login: Tue Feb  9 11:48:14 2021 from 172.16.2.1
7[root@localhost ~]# cd .ssh
8zhangcong@zhangcongdeMacBook-Pro ~ % cat id_rsa.conggege325.pub >> ~/.ssh/authorized_keys

或者直接运行:

1zhangcong@zhangcongdeMacBook-Pro ~ % ssh-copy-id -i ~/.ssh/id_rsa.pub root@172.16.2.130

终端连接中使用公钥

ssh -p 7006 -i /root/.ssh/id_rsa_anonymous@copote.com root@211.156.195.19

-p 可选参数,表示ssh的端口号,默认22

-i 可选参数,表示指定登录的私钥,默认是/root/.ssh/id_rsa

多个ssh公钥配置

生成私钥和公钥的默认的名称是id_rsa和id_rsa.pub;远程服务器登录时,会默认读取id_rsa密钥进行验证。

我们当然可以可以直接指定登录的私钥,但是书写麻烦;

更重要的是,并且我们无法使用 ssh 连接多个不同密钥的 git 服务器。

因此,我们在使用多个密钥对的时候,可以通过配置的方式告诉ssh哪个服务器验证用哪个密钥。

假定我们生成了两组密钥(注意输入生成SSH-key指令后,需要按回车3次,表示empty,即“空”,“空”代表没有密码):

ssh-keygen -t rsa -C “conggege325@qq.com” -f ~/.ssh/github_id_rsa

ssh-keygen -t rsa -C “conggege325@qq.com” -f ~/.ssh/gitee_id_rsa

ssh-keygen -t rsa -C “conggege325@qq.com” -f ~/.ssh/copote_id_rsa

然后在 ~/.ssh 文件夹下创建 config 文件(如果不存在的话)

 1zhangcong@zhangcongdeMacBook-Pro ~ % vim ~/.ssh/config
 2
 3Host github.com
 4HostName github.com
 5Port 22
 6User git
 7PreferredAuthentications publickey
 8IdentityFile ~/.ssh/github_id_rsa
 9
10Host gitee.com
11HostName gitee.com
12Port 22
13User git
14PreferredAuthentications publickey
15IdentityFile ~/.ssh/gitee_id_rsa
16
17
18Host 200.200.200.79
19HostName 200.200.200.79
20Port 22
21User git
22PreferredAuthentications publickey
23IdentityFile ~/.ssh/copote_id_rsa

说明:

  • Host 主机名,相当于为远程主机取一个别名,后面就直接使用 “ssh 别名” 的方式登录

  • HostName 是服务器ip地址或者域名(可选)

  • Port 远程登录的ssh端口(可选)

  • User 登录的用户名(可选)

  • PreferredAuthentications 登录方式:publickey、password (可选)

  • IdentityFile 密钥文件路径(可选)

配置完后,直接使用 ssh Host 的方式进行登录,例如:

ssh github.com

如果在配置是未指定User,应使用:

ssh root@github.com

在secureCRT客户端中使用公钥

找到 连接 > 属性 > SSH2> 在右边的Authentication中钩选publicKey并点击右边的属性,在新的弹出框中的golbal settings中选择刚下载的id_rsa文件,点击OK完成。

这样就可以使用secureCRT就可以直接免密登录远程机器上了。