ssh配置密钥(证书)登录

实验环境:

ssh客户端:172.16.1.106

ssh服务器:172.16.1.101

实验要求:允许ssh客户端通过私钥连接到ssh服务器。并且关闭ssh密码认证。

一、ssh客户端生成密钥文件

ssh客户端执行如下命令生成公钥和私钥:

ssh-keygen -t rsa 

回车之后,会提示我们是否将密钥文件放到/root/.ssh/目录下,并将其命名为id_rsa。(注意这里登录的用户不同。生成的用户也不同。默认为用户的家目录。我这里登录的是root。因此在root家目录)

ssh配置密钥(证书)登录插图

我们这里直接使用回车保持即可。

之后会提示输入密码这个密码是我们使用密钥文件需要的密码。(如果想要在使用该密钥登录的时候,需要密码我们这里直接输入想设置密码即可)

PS:Linux的基本操作。输入密码时候没有任何回显。

ssh配置密钥(证书)登录插图1

我这里就直接回车了。保持默认。默认为使用该密钥文件不需要密码

接着会验证我们输入的密码是否一致

ssh配置密钥(证书)登录插图2

如果上一步设置了密码。输入上步设置的密码即可。如果没有设置直接回车即可。

我这里直接回车

接着会和我们跟我们提示:

私钥文件在/root/ssh/目录下,并且文件名为id_rsa

公钥文件在/root/ssh/目录下,并且文件名为id_rsa_pub

私钥文件(id_rsa)留在客户端,公钥文件(id_rsa_pub)发送给服务端。

ssh配置密钥(证书)登录插图3

进入到目录/root/.ssh,会发现有如下两个文件。即我们的公钥和私钥:

ssh配置密钥(证书)登录插图4

二、将公钥发送给ssh服务器

使用ssh-copy-id命令将我们的公钥文件,发送给服务端

ssh-copy-id -i ~/.ssh/id_rsa.pub root@172.16.1.101

我这里的公钥文件为id_rsa.pub。后面跟的是我们连接ssh服务器的用户@服务器地址

之后会提示我们是否继续连接。我们键入yes即可。

ssh配置密钥(证书)登录插图5

接着,会让我们输入ssh服务端的密码。我们这里键入即可。(注意:这里的密码为ssh服务器的登录密码。不是设置密钥时密码。)

ssh配置密钥(证书)登录插图6

键入密码之后,会提示我们将公钥文件,发送到了./ssh/authoriazed_yes

我们这里切换到ssh服务端。进入到 .ssh目录下查看

ssh配置密钥(证书)登录插图7

发现该目录下生成了名为authorized_keys文件。而此文件则是我们的认证密钥文件。

三、ssh服务器配置密钥登录

接着我们在ssh服务器打开ssh的配置文件。

vim /etc/ssh/sshd_config

添加或如下配置:

StrictModes no           // 设置为no不然会有因为权限而登录失败的问题
passwordauthentication no              // 将密码认证设置为no 则表示关闭
Pubkeyauthentication yes                  // 是否允许公钥认证
RSAauthentication yes                   //  是否允许使用纯 RSA 公钥认证
AuthorizedKeysFile ~/.ssh/authorized_keys   //指定存放该用户可以用来登录的密钥文件路径

配置如下:

ssh配置密钥(证书)登录插图8

接下来我们重启ssh服务器

systemctl restart sshd      // Centos7以上 包含7
 
service sshd restart       // Centos6
ssh配置密钥(证书)登录插图9

重启成功之后,我们客户端验证登录:

ssh -i ~/.ssh/id_rsa root@172.16.1.101
ssh配置密钥(证书)登录插图10

发现登录成功。至此实验完成

四、配置中常见的问题

1、为什么我的root用户ssh登录失败而其他用户登录成功?

一般错误是这样的(如果ssh是通过密码登录的,则可能提示密码错误。让重新输入密码)。

[root@localhost ~]# ssh -i ~/.ssh/id_rsa root@172.16.1.101
Permission denied (publickey,gssapi-keyex,gssapi-with-mic).

出现上述问题。可能是由于我们的ssh服务器配置文件并没有开启允许root用户登录到ssh。

解决步骤:

编辑ssh配置文件。搜索PermitRootLogin查询配置是否为yes,如果不为yes,则尝试修改为yes。重启服务器再次尝试登录

ssh配置密钥(证书)登录插图11
PermitRootLogin yes

2、证书登录的时候为什么会提示Permission denied (publickey,gssapi-keyex,gssapi-with-mic)?

出现这个问题,原因是authorized_keys文件地权限不当。因此会报权限被拒绝错误。

解决方法:

authorized_keys文件地权限设置为644

chmod 644 ~/.ssh/authorized_keys
ssh配置密钥(证书)登录插图12

或在将ssh服务器的ssh配置文件里面的Strictmodes修改为no

StrictModes no
ssh配置密钥(证书)登录插图13

重启ssh服务后生效。

3.ssh在使用证书登录的时候提示WARNING: UNPROTECTED PRIVATE KEY FILE!

提示如下:

@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@         WARNING: UNPROTECTED PRIVATE KEY FILE!          @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
Permissions 0777 for 'id_rsa' are too open.
It is required that your private key files are NOT accessible by others.
This private key will be ignored.
bad permissions: ignore key: id_rsa
Permission denied (publickey,gssapi-keyex,gssapi-with-mic).

出现这个问题,一般是因为ssh客户端的私钥文件id_rsa权限过大。比如777权限。因此提示你不受保护的私钥文件。

解决方法:

id_rsa文件设置权限600

chmod  600 ~/.ssh/id_rsa

如果是普通用户我们需要使用sudo ssh -i id_rsa root@172.16.1.101。进行连接。因为除了root用户,其他人都没有权限。

参考链接:ssh_config中文手册

本文作者: x1ong
免责声明:本博客所有文章仅用于学习交流
转载声明:文章为作者原创文章 转载请注明来源
本文链接: https://www.x1ong.fun/linux/13505.html
上一篇
下一篇