SSH证书登录实现步骤

一、SSH证书登录步骤:

  1. 客户端在本地生成SSH证书:包括公钥和私钥,一般创建私钥时应该设置好自己的密码,然后将私钥妥善保存在客户端,防止被盗。
  2. 服务器添加公钥白名单:客户端将公钥上传至服务器,或者交给运维人员,然后将公钥添加至ssh的信任列表中就可以了。
  3. 用户可以用一个私钥登录不同服务器,只要在想登录的服务器中添加自己的公钥即可。

二、客户端创建私钥和公钥

1、在客户端运行命令

ssh-keygen -t rsa  -f  ~/.ssh/id_rsa_web1 -C "key for web1"

-b:指定密钥长度;
-C:添加注释;
-e:读取openssh的私钥或者公钥文件;
-f:指定用来保存密钥的文件名,不设置路径默认保存在用户~/.ssh/目录下;
-i:读取未加密的ssh-v2兼容的私钥/公钥文件,然后在标准输出设备上显示openssh兼容的私钥/公钥;
-l:显示公钥文件的指纹数据;
-m 参数指定密钥的格式,PEM(也就是RSA格式)是之前使用的旧格式
-N:提供一个新密语;
-P:提供(旧)密语;
-q:静默模式;
-t:指定要创建的密钥类型,有rsa1(SSH1),dsa(SSH2),ecdsa(SSH2),rsa(SSH2)等类型, 证书登录常用的是的是rsa类型

2、运行命令会提示输入密码,如果测试不需要密码可以直接敲回车
在这里插入图片描述
3、最后生成两个文件,分别是 id_rsa_web1(私钥)和id_rsa_web1.pub(公钥) :

私钥

-----BEGIN RSA PRIVATE KEY-----
MIIEowIBAAKCAQEA3miSzJOGnDHW8c/4RpmrLwlUFzQqYTeekzqdl8EiyEr+QVae
…中间内容忽略…
R3ts4WhP0MOwldynTdEfTDYqZW/Z8OjuXGpCblD2tcsXsygGgvQ7
-----END RSA PRIVATE KEY-----

公钥

ssh-rsa AAAAB3NzaC1yQD…省略…mZnKat8ibmDf key for web1

4、Windows可以下载GitBash工具运行命令行
https://git-scm.com/download/win

三、服务器SSH配置

1、使用root用户打开ssh配置文件,修改前养成备份的习惯。

cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bk
vim /etc/ssh/sshd_config

配置修改如下:

#禁用root账户登录,非必要
PermitRootLogin no

# 是否让 sshd 去检查用户家目录或相关档案的权限数据,
StrictModes no

# 是否允许用户使用密钥登入系统,仅version 2。
RSAAuthentication yes
PubkeyAuthentication yes
# 公钥白名单数据保存位置
AuthorizedKeysFile %h/.ssh/authorized_keys

# 禁用密码登录
PasswordAuthentication no

2、将客户端秘钥上传至服务器

scp ~/.ssh/id_rsa_web1.pub [email protected]:~/.ssh/

test 目标服务器用户名,192.168. 是目标服务器地址,: 后面是保存路径。

如果从远程下载 将两个地址格式互换一下(window同理)

scp [email protected]:~/.ssh/id_rsa_web1.pub ~/.ssh/

3、将公钥写入白名单

cat ~/.ssh/id_rsa_web1.pub >> ~/.ssh/authorized_keys

cat 打印公钥内容
>> 将内容直接追加到authorized_keys文件末尾。也可以使用vim编辑直接将公钥内容粘贴到末尾。

authorized_keys内容如下:

ssh-rsa AAAAB3N+hFt…省略…8IiPybRJdPMsur/NeN3U8t test
ssh-rsa AAAAB3NzaC1yQD…省略…mZnKat8ibmDf key for web1

4、编辑好之后重启ssh服务

/etc/init.d/ssh restart

四、客户端SSH证书连接

1、使用ssh证书登录服务器

ssh -i ~/.ssh/id_rsa_web1.pub [email protected]

-i: 指定私钥路径

2、使用scp命令

scp -i ~/.ssh/id_rsa_web1.pub ~/1.txt [email protected]:~

3、 修改客户端ssh配置文件,设置默认的证书

#添加证书地址
IdentityFile ~/.ssh/id_rsa

五、不同服务器单独配置证书

1、配置host文件

vi /etc/hosts
(windows 目录 C:\Windows\System32\drivers\etc,需要右击用管理员权限运行记事本)

内容如下:

192.168.1.112 web1.com
192.168.1.113 web2.com

2、编辑ssh配置文件(windos在C:\Users\用户.ssh文件夹下)

vim /etc/ssh/sshd_config
(windos 在C:\Users\用户\.ssh文件夹下)

内容如下:

Host web1.com
    IdentityFile ~/.ssh/id_rsa_web1
    User test
Host web2.com
    IdentityFile ~/.ssh/id_rsa_web2
    User root

Host 为要登录的服务器
IdentityFile 为证书私钥地址
User 为登录的用户
重启服务后(window不用重启),登录服务器就不需要指定证书地址了

六、证书加密方式遇到的问题

1、在使用rsa加密方式生成私钥后,无法导入xshell工具中,或报错:Resource temporarily unavailable. Authentication by key (/Users/youname/.ssh/id_rsa) failed (Error -16). (Error #35)。
打开私钥文件对比发现,生成的私钥第一行变成了“BEGIN OPENSSH PRIVATE KEY” 而不是“BEGIN RSA PRIVATE KEY”,新版本ssh命令,使用rsa加密时,默认都是OPENSSH格式。

解决方式
使用命令 ssh-keygen -m PEM -t rsa -b 4096 可生成旧版本格式。

你可能感兴趣的:(linux常用工具)