SSH公钥登录和RSA非对称加密
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
目录看到生成的公钥和私钥了
同步发表于:https://www.guitu18.com/post/2020/05/01/71.html
服务器开启公钥登陆
接着就是将我们的公钥写入服务器的密钥验证文件了,在写入前我们还要在服务器开启密钥登陆。
修改sshd配置文件:vim /etc/ssh/sshd_config
这里你需要关注的参数有三个,逐一说明:
# 公钥登录开关,默认是关闭的,将他打开,修改为 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连接工具都带了生成秘钥的功能,感兴趣的可以自己尝试一下。
RSA加密
说RSA加密要先说两个概念:对称加密和非对称加密
对称加密:
对称加密是最快速、最简单的一种加密方式,加密(encryption)与解密(decryption)用的是同样的密钥(secret key)。对称加密有很多种算法,由于它效率很高,所以被广泛使用在很多加密协议的核心当中。对称加密通常使用的是相对较小的密钥,一般小于256 bit。因为密钥越大,加密越强,但加密与解密的过程越慢。如果你只用1 bit来做这个密钥,那黑客们可以先试着用0来解密,不行的话就再用1解;但如果你的密钥有1 MB大,黑客们可能永远也无法破解,但加密和解密的过程要花费很长的时间。密钥的大小既要照顾到安全性,也要照顾到效率。对称加密的一大缺点是密钥的管理与分配,换句话说,如何把密钥发送到需要解密你的消息的人的手里是一个问题。在发送密钥的过程中,密钥有很大的风险会被黑客们拦截。现实中通常的做法是将对称加密的密钥进行非对称加密,然后传送给需要它的人。
非对称加密:
非对称加密为数据的加密与解密提供了一个非常安全的方法,它使用了一对密钥,公钥(public key)和私钥(private key)。私钥只能由一方安全保管,不能外泄,而公钥则可以发给任何请求它的人。非对称加密使用这对密钥中的一个进行加密,而解密则需要另一个密钥。比如,你向银行请求公钥,银行将公钥发给你,你使用公钥对消息加密,那么只有私钥的持有人--银行才能对你的消息解密。与对称加密不同的是,银行不需要将私钥通过网络发送出去,因此安全性大大提高。目前最常用的非对称加密算法是RSA算法。虽然非对称加密很安全,但是和对称加密比起来,它非常的慢,所以我们还是要用对称加密来传送消息,但对称加密所使用的密钥我们可以通过非对称加密的方式发送出去。
非对称加密在很多地方都有应用,如HTTPS。HTTPS的非对称加密还涉及到一个CA证书颁发机构,先通过CA根证书以非对称加密的方式进行认证,然后再从服务器拿到公钥,之后再用公钥加密传输对称加密要用到的秘钥,这样就保证了对称加密证书的安全性,接着就可以愉快的用对称加密来进行通信了。
非对称加密在这里有两个作用:认证和安全传输对称加密秘钥。为啥不用非对称加密直接通信呢?前面说过,非对称加密确实安全,但是它慢啊,而且非常慢。在保证了对称加密证书的可靠性之后,对称加密的通信也是安全的,那么后面就可以直接用更高效的对称加密通信了。
转载请注明出处及相关链接。如果,您认为阅读这篇博客让您有些收获,不妨点击一下右下角的【推荐】按钮。
如果,您希望更容易地发现我的新博客,不妨点击一下下方绿色通道的【关注我】,或者关注我的个人博客【夜月归途】。