相比于对称加密,在互联网中应用更为广泛的是非对称加密。后者解决了前者在密钥分发过程中的不安全、不便捷的问题。
非对称加密与解密中,使用者需要在自己手中根据算法生成一对密钥,公钥A和私钥A。公钥A可以发送给需要信息交互的对象(公开到了网络中),私钥A自己保留。当用对象使用公钥A进行加密的文本,传输到网络中时,只有私钥A才能对该文本解密。所以如果是为了保证信息交互的私密性,那么就必须使用公钥加密,对应的私钥解密。而如果使用私钥A加密的文本传输到网络中去,那么公钥A可以对其进行解密,这种属于数字签名,也就是说保证这个文本是由A发送出来的,但是由于公钥A是公开的,所以内容并不保密。如图:
在该图中,A和B的交互,都是公钥加密,私钥解密,所以网络传输的密文其他人是无法解开的。
-------------------------------------------------------------------------------------
在ssh或者scp命令中,我们采用ssh协议进行交互操作或者数据传输,如果每次都要输入密码,是很麻烦的,可以采用ssh-keygen的方式,生成各自的公钥私钥,继而实现免密交互。
1.生成公私钥:
见图,其中ssh-keygen是一个ssh秘钥生成(ssh key generator)的命令,可以自行查阅其使用的参数,常用的-t标识采用的加密算法,-C标识备注信息。
2.将自己的公钥发送给需要交互的对象:
在/root/.ssh/目录下,就是我们的私钥和公钥,而authorized_keys就是其他站点的信任公钥。
此时,我们的私钥就在id_rsa中,而公钥就是id_rsa.pub,我们需要做的就是把公钥文本中的内容,复制到其它服务器的authorized_keys中去。
注意,这里可以存放多个信任来源的公钥文本。不同的公钥文本之间需要换行。
OK,大功告成,此时我们就可以从本地,免密ssh登录或者其它操作了。
同理,如果对方服务器想免密登录到我们的服务器上时,只要把对方服务器的公钥存放在我们服务器上的authorized_keys中。
-------------------------------------------------------------------------------------
在win10中,系统也是支持ssh,我们可以在管理可选功能中找到它们。如果没有安装,直接点击安装,安装完成后需要重启电脑生效。
如果没有安装,那么他们不会在列表中,你需要点击+添加功能找到它们:
完成安装后,可以在windows上生产公钥私钥对,然后将公钥放到linux服务器上,此时我们在cmd命令行中也可以ssh免密登录,scp传输文件等操作:
这种免密操作可以为后续的自动化脚本提供便利。