SSH登录方式

接触过Linux服务器的同学肯定用过SSH协议登录系统,通常SSH协议都有两种登录方式:密码口令登录和公钥登陆。

一、密码口令(类似于账号密码登录)

      1.客户端连接服务器,服务器把公钥发给客户端
      2.客户端输入登录口令,并用服务器公钥加密后提交给服务器
      3.服务器用私钥解密,结果匹配,则允许登录

二、公钥登录(一般用RSA非对称加密)

     1.客户端生成密钥对
     2.将客户端的公钥写入服务器的密钥验证文件
     3.客户端请求登录,服务器生成一段随机字符串,并使用客户端公钥加密后发送给客户端
     5.客户端使用自己的私钥解密,并返回解密后的信息到服务器
     6.服务器进行信息对比,如果结果匹配,则允许登录

SSH公钥登陆

生成秘钥

生成秘钥,Windows/Linux通用:

# -t:指定秘钥类型,不指定默认为RSA
# -C:注释,可以不用设置,主要用于识别秘钥,可以写邮箱、用户名等信息
# -b:秘钥长度,默认2048位,一般不用设置
ssh-keygen -t rsa -C "www.guitu18.com"

以Windows演示(Linux是一样的),这里会有三次确认输入,第一个是设置秘钥保存的路径,第二个和第三个是设置秘钥的密码。默认秘钥保存路径不用修改,如果不设置密码直接按三次Enter即可。

生成密钥对

之后你就能在当前用户目录下的.ssh目录看到生成的公钥和私钥了

密钥对文件

服务器开启公钥登陆

接着就是将我们的公钥写入服务器的密钥验证文件了,在写入前我们还要在服务器开启密钥登陆。

修改sshd配置文件:vim /etc/ssh/sshd_config

修改SSHD配置文件

这里你需要关注的参数有三个,逐一说明:

# 公钥登录开关,默认是关闭的,将他打开,修改为 yes
PubkeyAuthentication yes
# 秘钥验证文件,默认值为 .ssh/authorized_keys 通常不用修改
AuthorizedKeysFile      .ssh/authorized_keys
# 密码登录开关,默认开启(在公钥登录调试完成前你可以先开启密码登录)
PasswordAuthentication no

如果你有看过其他配置教程,你可能还会看到要你开启一个RSAAuthentication的参数:

# 这个参数在CentOS 7.4之后弃用了
RSAAuthentication yes

如果你的系统是CentOS 7.4及以后,你在 /etc/ssh/sshd_config 文件中会找不到这个参数,不用理会也不用将它加进来,SSH第二代协议已经将它废弃了。

修改完成后重启sshd服务即可:

# 也可以用这个命令:service sshd restart
systemctl restart sshd

将公钥写入服务器

现在你需要把你本地生成的公钥信息写入秘钥验证文件,也就是 .ssh/authorized_keys文件,你可以将你的公钥上传到服务的~/.ssh/目录后改名为 authorized_keys,也可以用文本编辑器将公钥打开,复制文本内容到服务器的authorized_keys文件里(配置多态客户端公钥时,换行后直接往后面追加公钥内容即可)。

vim ~/.ssh/authorized_keys

ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCp29fDtYdrHaj6l+QAs4RXvkFaoct1mYlKrQze4MQDN1d308SbVLPgY6F3D80MMpdfu9fpKZzNbpgzCWkncfzX8ClJts2AaT1smsr23ubFnq6/OOPXQJi2zIagOorSn+KjME8gHOfraGn1vNKJemdmpqDe+jmWTzlAaGecUHoh+fWwBl5lA/Cz62OJ1k/O3TwLF7sn3QPLggv3CdZ8y3Vh1k6XN9GCtUlL/TujK3iYGHE3410AOLdNb56+t6k/NJJZwpH/x77Zf6sWsZo8Ri/tFGhsCKIniu56o+m6R3/Ar40LOz6gmfJbwfQsqwNGh67/LtO00QDm6qfpEdNkz2v1 www.guitu18.com

使用公钥登陆

现在你使用你的公钥来登录服务器了,这里以Xshll举例,点击链接服务器之后,会弹出认证窗口(我关闭了密码登录所以密码选项是灰色的)。点击 [浏览] > [用户秘钥] ,在弹出的界面点击 [导入],选择你之前生成的秘钥对中的私钥(是私钥不要选错了),如果在生成秘钥的时候设置了密码在导入时也需要输入密码。

添加用户秘钥

导入私钥

导入成功后返回认证窗口选择刚导入的秘钥登录,如果生成秘钥的时候设置了密码,在用秘钥登录时也需要输入密码,口令正确即可登录成功了。

细心的朋友应该看到在证书导入的界面有一个生成按钮,是的,Xhell也可以帮我们生成证书,而且是图形化界面操作(Linux非图形模式只能用命令行生成),非常友好,其实大部分SSH连接工具都带了生成秘钥的功能,感兴趣的可以自己尝试一下。

限制用户SSH登录

某些情况下,我们需要做一些特殊的限制,比如宝塔终端里面,用的是127.0.0.1登录的,我想让root用户只能以127.0.0.1登录,那么用黑白名单模式就能实现了。

还是上面的sshd配置文件:vim /etc/ssh/sshd_config,在文件末尾增加下面的配置

# 白名单模式,允许test用户和root用户以127.0.0.1登录
AllowUsers    test root@127.0.0.1
# 黑名单模式,拒绝test和root用户登录
DenyUsers    test root

修改完成后重启sshd服务:

# 也可以用这个命令:service sshd restart
systemctl restart sshd

RSA加密

说RSA加密要先说两个概念:对称加密和非对称加密

对称加密

对称加密是最快速、最简单的一种加密方式,加密(encryption)与解密(decryption)用的是同样的密钥(secret key)。对称加密有很多种算法,由于它效率很高,所以被广泛使用在很多加密协议的核心当中。对称加密通常使用的是相对较小的密钥,一般小于256 bit。因为密钥越大,加密越强,但加密与解密的过程越慢。如果你只用1 bit来做这个密钥,那黑客们可以先试着用0来解密,不行的话就再用1解;但如果你的密钥有1 MB大,黑客们可能永远也无法破解,但加密和解密的过程要花费很长的时间。密钥的大小既要照顾到安全性,也要照顾到效率。对称加密的一大缺点是密钥的管理与分配,换句话说,如何把密钥发送到需要解密你的消息的人的手里是一个问题。在发送密钥的过程中,密钥有很大的风险会被黑客们拦截。现实中通常的做法是将对称加密的密钥进行非对称加密,然后传送给需要它的人。

非对称加密

非对称加密为数据的加密与解密提供了一个非常安全的方法,它使用了一对密钥,公钥(public key)和私钥(private key)。私钥只能由一方安全保管,不能外泄,而公钥则可以发给任何请求它的人。非对称加密使用这对密钥中的一个进行加密,而解密则需要另一个密钥。比如,你向银行请求公钥,银行将公钥发给你,你使用公钥对消息加密,那么只有私钥的持有人--银行才能对你的消息解密。与对称加密不同的是,银行不需要将私钥通过网络发送出去,因此安全性大大提高。目前最常用的非对称加密算法是RSA算法。虽然非对称加密很安全,但是和对称加密比起来,它非常的慢,所以我们还是要用对称加密来传送消息,但对称加密所使用的密钥我们可以通过非对称加密的方式发送出去。

引用:https://www.cnblogs.com/scofi/p/6617394.html

非对称加密在很多地方都有应用,如HTTPS。HTTPS的非对称加密还涉及到一个CA证书颁发机构,先通过CA根证书以非对称加密的方式进行认证,然后再从服务器拿到公钥,之后再用公钥加密传输对称加密要用到的秘钥,这样就保证了对称加密证书的安全性,接着就可以愉快的用对称加密来进行通信了。

非对称加密在这里有两个作用:认证和安全传输对称加密秘钥。为啥不用非对称加密直接通信呢?前面说过,非对称加密确实安全,但是它慢啊,而且非常慢。在保证了对称加密证书的可靠性之后,对称加密的通信也是安全的,那么后面就可以直接用更高效的对称加密通信了。

参考:https://www.cnblogs.com/scofi/p/6617394.html

参考:https://www.cnblogs.com/Leroscox/p/9627809.html

Last modification:July 23rd, 2020 at 05:57 pm