非对称加密算法简述:

对称加密算法在加密和解密时使用的是同一个秘钥;而非对称加密算法需要两个密钥来进行加密和解密,这两个秘钥是公开密钥(public key,简称公钥)和私有密钥(private key,简称私钥)。


1、乙方生成一对密钥(公钥和私钥)并将公钥向其它方公开。

2、得到该公钥的甲方使用该密钥对机密信息进行加密后再发送给乙方。

3、乙方再用自己保存的另一把专用密钥(私钥)对加密后的信息进行解密。乙方只能用其专用密钥(私钥)解密由对应的公钥加密后的信息。

在传输过程中,即使***者截获了传输的密文,并得到了乙的公钥,也无法破解密文,因为只有乙的私钥才能解密密文。

同样,如果乙要回复加密信息给甲,那么需要甲先公布甲的公钥给乙用于加密,甲自己保存甲的私钥用于解密。


非对称加密与对称加密相比,其安全性更好:对称加密的通信双方使用相同的秘钥,如果一方的秘钥遭泄露,那么整个通信就会被破解。而非对称加密使用一对秘钥,一个用来加密,一个用来解密,而且公钥是公开的,秘钥是自己保存的,不需要像对称加密那样在通信之前要先同步秘钥。


为何要使用非对称秘钥对登陆服务器?

在linux终端输入命令# lastb ,可以查看到有大量的外来ip尝试连接linux终端,这是***尝试暴力破解所致的,账户密码较弱、使用默认的22端口等因素给服务器安全埋下隐患。下面通过修改ssh连接的端口号,禁止密码验证方式登陆,使用非对称秘钥方式登陆来解决这个问题。


利用Xshell实现非对称秘钥对登陆linux:

1)生成公钥(Pubic Key)与私钥(Private Key):

点击菜单栏的工具->新建用户密钥生成向导。

wKiom1iLKjbQlhzoAACyQNDZUGc337.png


虽然SSH2协议中RSA和DSA算法都可以使用,但是为了保险起见,我们一般都选择RSA密钥类型,这样不论你使用的SSH协议是SSH1还是SSH2都可以使用;密钥长度3072以上(位数越长越安全)。

wKioL1iLKjfwiU5pAADOrN0mL8k986.png


正在生产秘钥,直接下一步即可。

wKiom1iLKjfjV22OAABzlYrESDg839.jpg


如果希望更安全可言设置秘钥密码,这里自己下一步跳过。

wKiom1iLKjiSVDPjAABVYFSS7TI812.jpg


公钥格式默认的SSH2-OpenSSH即可,保存文件备份好。

wKioL1iLKjiiS3OXAACZR2YkeEU953.jpg


通过公钥导出对应的私钥文件,保持文件备份好。

wKiom1iLKjmRL1OOAAA3IhPPv5E587.jpg


xhell生成公钥带pub扩展名,xhell生成的私钥不带扩展名。

wKioL1iLKjnxj_77AAAlNZ_UL4Y253.jpg


2)添加公钥(Pubic Key)到远程Linux服务器;

用户home目录下创建文件夹 .ssh(隐藏目录,chmod命令权限设置700, ),通过filezilla上传公钥文件到用户家目录的.shh文件夹中,并修改名字为authorized_keys(权限设置600),或者.shh文件夹下建立authorized_keys把公钥内容保持其中,保存。



修改sshd_config配置文件(编辑sshd_config时必须开启允许RSA秘钥

vim /etc/ssh/sshd_config 

Port ... #修改22默认端口号,ssh协议端口号被知道了很不安全
PubkeyAuthentication yes #启用公告密钥配对认证方式 
AuthorizedKeysFile  %h/.ssh/authorized_keys  #设定PublicKey文件路径
RSAAuthentication yes #允许RSA密钥
PasswordAuthentication no #禁止密码验证登录,如果启用的话,RSA认证登录就没有意义了

(TIPS:vim命令模式下输入 /搜索内容 可以快速定位搜索,按n查找下一个,云服务器修改ip重启ssh服务出现无法连接是因为配置安全组没有设置默认安全组全部端口开放的设置,点选即可)


重新加载sshd服务(第一条指令centos第二条指令ubuntu): 

# systemctl restart sshd.service
# service ssh restart
#  /etc/init.d/sshd restart/stop/start/status


3)客户端载入私钥(Private Key)登录(关键!没有这一步直接登录会提示所选的用户密钥未在远程主机上注册的警告提示):

wKiom1iLOKnCuZ4hAACZ2up9a9U100.jpg


4) 最后验证非对称秘钥登陆是否成功,账户登陆是否失效,自定义端口号是否正常连接,.ssh权限是否770(drwx------),authorized_keys权限是否设置为660(-rw-------),都没问题后服务器登陆安全就做好了。

注: 

私钥,在Xshell里也叫用户密钥 

公钥,在Xshell里也叫主机密钥