环境:
CentOS Linux release 8.2.2004 (Core)
Linux主机的远程登陆通常有两种方式,一是通过提供IP和密码的方式进行登陆;二是使用密钥进行验证登陆。本文记录了通过密钥实现验证登陆的配置过程。
通过密钥验证登陆的基本思想如下:
基于密钥的安全验证需要为用户创建一对密钥,从而使得对信息的加密和解密采用不同的key,这对key分别称作private key和public key,其中,public key存放在欲登录的服务器上,而private key为特定的客户机所持有。
当客户机向服务器发出建立安全连接的请求时,首先发送自己的public key,如果这个public key是被服务器所允许的,服务器就发送一个经过public key加密的随机数据给客户机,这个数据只能通过private key解密,客户机将解密后的信息发还给服务器,服务器验证正确后即确认客户机是可信任的,从而建立起一条安全的信息通道。
通过这种方式,客户机不需要向外发送自己的身份标志“private key”即可达到校验的目的,并且private key是不能通过public key反向推断出来的。这避免了网络窃听可能造成的密码泄露。客户机需要小心的保存自己的private key,以免被其他人窃取,一旦这样的事情发生,就需要各服务器更换受信的public key列表。
实现通过密钥验证登陆的配置过程主要分为以下4个步骤:
- 生成密钥;
- 将密钥保存到远程服务器;
- 使用客户端测试使用密钥登陆;
- 修改远程Linux服务器sshd服务配置;
一、生成密钥
生成密钥的方式有多种,这里主要介绍3中生成方式,分别是通过ssh-keygen、xshell、puttygen生成。
1.通过ssh-keygen方式生成密钥
如果你使用的是Linux主机,那么我们可以通过ssh-keygen的方式生成一对密钥,具体方法是在终端输入以下命令:
ssh-keygen -t rsa
上述命令的意思是通过rsa加密的方式生成一对密钥,过程如下:
通过上述过程,我们就在/home/centos/.ssh/
目录下生成了两个文件id_rsa
和id_rsa.pub
两个文件(生成过程这里都是回车默认生成的),分别为私钥和公钥文件,公钥文件(id_rsa.pub)就是在接下来需要放置在要远程登陆的服务器上的文件,而id_rsa就是要保存到进行远程登陆的客户端的私钥文件。
2.通过xshell方式生成密钥
你也可以在windows客户端主机上使用xshell生成密钥,你可以在这里下载家庭和学校的免费版本(Home & School user,可能你得注册一个账号才能下载)。使用xshell生成密钥的方法如下:
运行xshell5,点击顶部菜单”工具(Tools)”–>”新建用户密钥生成向导(New User key wizard)”
通过上述步骤,我们就得到了一个id_rsa_2048.pub文件(当然,你可能命名了其他名字),这个就是接下来我们需要放置在要进行远程登陆的公钥文件。
二、将密钥保存到远程服务器
1.如果是通过ssh-keygen生成的密钥对,那么我们需要将id_rsa.pub
文件放置到你要进行远程登陆的用户主目录下,比如这里的用户名为centos,主目录为/home/centos
,那么我们需要将id_rsa.pub
公钥放置到/home/centos/.ssh
目录下,然后执行以下操作:
- 执行
mv ./id_rsa.pub ./authorized_keys
,将id_rsa.pub
文件,重命名为 authorized_keys; - 执行
chmod 600 ./authorized_keys
命令,修改权限; - 执行
chmod 700 ~/.ssh
修改主目录下.ssh
目录的权限为700; - 执行命令
sudo vi /etc/ssh/sshd_config
进行配置,将PubkeyAuthentication 后面的值改成yes ,保存; - 重启sshd服务(Debian/Ubuntu执行
sudo /etc/init.d/ssh restart
;CentOS执行:sudo /etc/init.d/sshd restart
)。
注:centos7重启服务方式与以前不同,请执行systemctl restart sshd.service
。
2.如果是通过xshell方式生成的密钥对,那么将xshell生成的id_rsa.pub文件放置到用户的主目录下的.ssh目录(比如/home/centos/.ssh
),接下来执行的操作跟上述操作[1 ] 是一样的。
三、使用客户端测试使用密钥登陆
1.使用xshell进行密钥登陆
运行xshell5,顶部菜单”文件”->”新建”,接下来使用xshell进行登陆的步骤如下:
点击确定,登陆成功!
四、修改远程Linux服务器sshd服务配置
此时,我们是可以通过密码和密钥验证两种方式进行登陆的,我们需要设置以后只能通过密钥验证的方式进行登陆,具体设置的步骤如下:
- 修改
/etc/ssh/sshd_config
文件,将PasswordAuthentication yes
修改成PasswordAuthentication no
; - 重启sshd服务,Debian/Ubuntu执行
sudo /etc/init.d/ssh restart
;CentOS执行:sudo /etc/init.d/sshd restart
。
注:centos7重启服务方式与以前不同,请执行systemctl restart sshd.service
至此,设置完成,不过我们需要保存好生成的私钥文件。
参考文章:http://www.vpser.net/security/linux-ssh-authorized-keys-login.html