0xTTEPX

Just do it, deeply...

Follow me on GitHub

linux下ssh公钥验证的设置和远程登录

write by donaldhan, 2020-04-29 23:12

引言

在架设服务的过程中,使用密码登录方式,很容易出现密码被破的可能性。我们可以通过使用公钥验证的方式加强服务器的安全。

目录

服务登录验证方式

服务器登录方式主要有两种,密码口令登录,公钥登录原理,两种方式的基本原理如下:

密码口令登录

通过密码进行登录,主要流程为:

  1. 客户端连接上服务器之后,服务器把自己的公钥传给客户端
  2. 客户端输入服务器密码通过公钥加密之后传给服务器
  3. 服务器根据自己的私钥解密登录密码,如果正确那么就让客户端登录

公钥登录原理

公钥登录是为了解决每次登录服务器都要输入密码的问题,流行使用RSA加密方案,主要流程包含:

  1. 客户端生成RSA公钥和私钥
  2. 客户端将自己的公钥存放到服务器
  3. 客户端请求连接服务器,服务器将一个随机字符串发送给客户端
  4. 客户端根据自己的私钥加密这个随机字符串之后再发送给服务器
  5. 服务器接受到加密后的字符串之后用公钥解密,如果正确就让客户端登录,否则拒绝。这样就不用使用密码了。

下面我们使用公钥方式登录服务器

公钥登录

首先使用如下命令生成公私钥对

ssh-keygen 命令专门是用来生成密钥的。该命令有很多选项,这里列出了最基本的四个:

-t 用来指定密钥类型(dsa | ecdsa | ed25519 | rsa | rsa1);
-P 用来指定密语
-f 用来指定生成的密钥文件名
-C 用来添加注释
ssh-keygen -t rsa -P 123456 -f id_rsa -C 'donadl@home' 意思就是新建了密语为 123456 注释为 donadl@home 文件名为 id_rsa 的密钥。此命令会生成 id_rsa 和 id_rsa.pub 两个文件,前者为 私钥文件,后者为 公钥文件 。如果你想免密登录的话,请将密语设置为空。

针对window使用可以使用SecureCRT的工具生成对应的公私钥对。

然后将公钥上传到用户.ssh文件加下,同时公钥添加到认证文件。

相关命令如下

cat id_rsa.pub >> ~/.ssh/authorized_keys
[donaldhan@comosus .ssh]$ ls -al
total 16
drwx------ 2 donaldhan donaldhan 4096 Apr 29 22:55 .
drwx------ 5 donaldhan donaldhan 4096 Apr 28 23:40 ..
-rw-rw-r-- 1 donaldhan donaldhan  212 Apr 29 22:55 authorized_keys
-rw-rw-r-- 1 donaldhan donaldhan  212 Apr 29 22:47 id_rsa.pub
[donaldhan@comosus .ssh]$ pwd
/home/donaldhan/.ssh

注意这里的.ssh为需要登录用户的家目录下。

更改服务器配置

打开/etc/ssh/sshd_config文件,将如下的配置打开:

RSAAuthentication yes
PubkeyAuthentication yes
AuthorizedKeysFile  .ssh/authorized_keys

重启 sshd,service sshd restart或者systemctl restart sshd.service。重启之后,服务器已经支持远程 ssh 连接了

如果你想只允许服务器通过公钥和私钥的方式来连接服务器的话,可以将服务器配置文件 /etc/ssh/sshd_config 中的 PasswordAuthentication yes 改为 PasswordAuthentication No,不过在重启 sshd 时不要关闭当前的连接,确认通过私钥能连接到服务器才可以关闭。否则,一旦私钥连不上,密码连接方式又被禁用了,恐怕你就要告别你的服务器了。

总结

两种方式,根据自己的需要选择适合自己的方式,方式没有好坏,只有场景下适不适用。

linux下ssh公钥验证的设置和远程登录
使用 SSH 公钥验证
SSH公钥登录(私钥认证)原理