目录
对称加密和非对称加密的区别
- 对称式加密不太实用,由于加密和解密文件用的是同一个密码文件,所以一旦遗失密码文件,则就可以将所有传输信息进行解密
- 非对称式加密,则会产生公钥和私钥,利用公钥的密码文件进行加密,必须使用私钥的密码文件进行解密,使用前需要将公钥发给对方或公开,对方使用公钥对内容进行加密,将加密后的文件发送过来,自己使用秘钥进行解密操作,非对称加密不仅增强了数据的安全性,还简化了密钥管理的复杂性
- 对称加密更高效,适合处理大量数据,但要求密钥管理妥善。
- 非对称加密更安全,但由于其复杂性,处理速度较慢,通常与对称加密结合使用,例如通过非对称加密交换对称加密的密钥。
ssh安全密码认证
使用ssh则不会使用明文传输,会进行非对称形式加密,所以推荐使用ssh协议
注:即使数据传输时,加密后的文件和公钥同事丢失也没有问题,因为加密后的文件智能通过私钥进行解密,拿到公钥只是拿到对文件进行加密的算法,并不能倒推出文件的内容,这就体现出ssh协议的安全性
认证详细步骤
ssh设置免密登录是采用了对称和非对称加密的方式,在登录时采用非对称加密形式,而登录后后续的命令操作会产生大量数据,所以采用对称加密会提高效率
- 客户登录时需要向服务器发送一条ssh命令请求登录
- 服务端会采用非对称加密的方式产生公钥和私钥,公钥发送到客户端机器上
- 使用密码进行登录,客户端输入的密码在公钥加持下生成加密文件,发送到服务端
- 服务端拿到密码文件后利用私钥进行解密,并进行查找对应的账号密码是否存在
- 用户认证校验通过后会返回登录结果,并返回随机会话口令
- 可以正常通信,随机会话口令的作用是:为后续命令以对称加密形式传输
认证原理
要进行测试和探究密码认证原理,需要准备两台机器
客户端(windows,linux)
windows上可以使用cmd,xshell等远程连接工具打开终端
还可以使用提供的工具,叫做git-bash工具,利用这个工具,打开的终端,能识别部分的linux命令,去操作你的windows
https://github.com/git-for-windows/git/releases/download/v2.46.0.windows.1/Git-2.46.0-64-bit.exe
#1.首次连接,需要用户自己确认机器的指纹信息,输入yes确认后
$ ssh root@10.0.0.61
The authenticity of host '10.0.0.61 (10.0.0.61)' can't be established.
ED25519 key fingerprint is SHA256:knW71otjGwcQfsgF5e6d33QEluIK2gigZsIvxY0Qhak.
This key is not known by any other names
Are you sure you want to continue connecting (yes/no/[fingerprint])?
#其中红色字体表示SHA256加密的公钥文件,可以通过下方办法进行检验
#2.服务端会发送公钥给客户端,记录到客户端的 ~/.ssh/knows_hosts,(通用于windows,linux),表示已知的服务器公钥信息
此时客户端,还未确认该指纹,就不会把服务端的公钥,写入到该文件中
你现在可以去比对,指纹是否一致
ssh-keygen扫描公钥
ssh-keyscan命令,在客户端操作,可以获取目标机器的公钥信息,扫描目标机器的公钥
在客户端进行公钥扫描操作
$ ssh-keyscan 10.0.0.61
# 10.0.0.61:22 SSH-2.0-OpenSSH_7.4
10.0.0.61 ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIACCBz8czodMDmdAwKfciKtS4GGgPjaWjbDqQFVGmswL
# 10.0.0.61:22 SSH-2.0-OpenSSH_7.4
# 10.0.0.61:22 SSH-2.0-OpenSSH_7.4
10.0.0.61 ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDmL7NHkix0xlyoShrYijy/81FmPNI4Zw4MkG+oIYeT/kk4u9bjcWlNgUpPQjyJ4FKt0LSZmUyB1WdbIHHYnAQ2LtlMGLQn52dBEaGOtl6//l8o9QlFDCdd/gRlC9cJxAAVU8nnkraxb6WCFlbYKSGjIbguyXClroxnxJ8Ek9Y3NFJSwwbCTHywp5O2rIRLajVDmOJVWTbK3apJ/lYaTMmrdd9Wvpv2G8J0I7CK2nIPipT15T5n+Sz2WOu4AJAUQRhe3xi6rVgYuQJ0PgLBpa6DEBP5ZzzJNK13SbGSo9BQClF7CnAkqKJFLo0/GUkzYaga1/qXCpbsLVDOX/URMPWz
# 10.0.0.61:22 SSH-2.0-OpenSSH_7.4
10.0.0.61 ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBKuOOhHiu+zJpN9Qmlvj1C9bWUg0TpNNFqkpSWfd3OfRIY9qMcemHzV2waxRVxWIvee3x18VRHvka82J+4reeu0=
# 10.0.0.61:22 SSH-2.0-OpenSSH_7.4
#需要查找到对应的公钥文件进行SHA256加密,然后就可以看到和登录时确认的指纹信息是一样的
[root@master-61 ~]# ls /etc/ssh/ssh*
/etc/ssh/ssh_config /etc/ssh/ssh_host_ecdsa_key /etc/ssh/ssh_host_ed25519_key.pub
/etc/ssh/sshd_config /etc/ssh/ssh_host_ecdsa_key.pub /etc/ssh/ssh_host_rsa_key
/etc/ssh/sshd_config.bak /etc/ssh/ssh_host_ed25519_key /etc/ssh/ssh_host_rsa_key.pub
#通过命令,对该公钥进行加密,得到指纹
[root@master-61 ~]# ssh-keygen -E SHA256 -lf /etc/ssh/ssh_host_ed25519_key.pub
256 SHA256:knW71otjGwcQfsgF5e6d33QEluIK2gigZsIvxY0Qhak no comment (ED25519)
#用户认证完成确认指纹信息后,客户端~/.ssh/known_hosts文件里就会进行记载服务端/etc/ssh/ssh_host_ed25519_key.pub公钥信息
获取公钥的两种方法:
#1.在客户端扫描该机器的公钥
$ ssh-keyscan 10.0.0.61
# 10.0.0.61:22 SSH-2.0-OpenSSH_7.4
10.0.0.61 ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIACCBz8czodMDmdAwKfciKtS4GGgPjaWjbDqQFVGmswL
# 10.0.0.61:22 SSH-2.0-OpenSSH_7.4
# 10.0.0.61:22 SSH-2.0-OpenSSH_7.4
10.0.0.61 ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDmL7NHkix0xlyoShrYijy/81FmPNI4Zw4MkG+oIYeT/kk4u9bjcWlNgUpPQjyJ4FKt0LSZmUyB1WdbIHHYnAQ2LtlMGLQn52dBEaGOtl6//l8o9QlFDCdd/gRlC9cJxAAVU8nnkraxb6WCFlbYKSGjIbguyXClroxnxJ8Ek9Y3NFJSwwbCTHywp5O2rIRLajVDmOJVWTbK3apJ/lYaTMmrdd9Wvpv2G8J0I7CK2nIPipT15T5n+Sz2WOu4AJAUQRhe3xi6rVgYuQJ0PgLBpa6DEBP5ZzzJNK13SbGSo9BQClF7CnAkqKJFLo0/GUkzYaga1/qXCpbsLVDOX/URMPWz
# 10.0.0.61:22 SSH-2.0-OpenSSH_7.4
10.0.0.61 ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBKuOOhHiu+zJpN9Qmlvj1C9bWUg0TpNNFqkpSWfd3OfRIY9qMcemHzV2waxRVxWIvee3x18VRHvka82J+4reeu0=
# 10.0.0.61:22 SSH-2.0-OpenSSH_7.4
#2.2.在服务端
[root@master-61 ~]# cat /etc/ssh/ssh_host_ed25519_key.pub
ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIACCBz8czodMDmdAwKfciKtS4GGgPjaWjbDqQFVGmswL
认证完成后
#1.首次连接,需要用户自己确认机器的指纹信息,输入yes确认后即可认证完成
此时服务端会发送公钥给客户端,记录到客户端的 ~/.ssh/knows_hosts
ssh root@10.0.0.61
#2.查看客户端记录的 cat ~/.ssh/known_hosts ,记录了服务端的公钥信息
$ cat ~/.ssh/known_hosts
10.0.0.61 ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIACCBz8czodMDmdAwKfciKtS4GGgPjaWjbDqQFVGmswL
10.0.0.61 ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBKuOOhHiu+zJpN9Qmlvj1C9bWUg0TpNNFqkpSWfd3OfRIY9qMcemHzV2waxRVxWIvee3x18VRHvka82J+4reeu0=
这个字符串,就是你要连接的linux机器的公钥信息
在linux服务端,看到了基于ssh 密码认证的,公私钥文件信息
[root@master-61 ~]# ls /etc/ssh/ | grep ed25519
ssh_host_ed25519_key
ssh_host_ed25519_key.pub
查看公钥
[root@master-61 ~]# cat /etc/ssh/ssh_host_ed25519_key.pub
ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIACCBz8czodMDmdAwKfciKtS4GGgPjaWjbDqQFVGmswL
[root@master-61 ~]# cat /etc/ssh/ssh_host_ed25519_key
-----BEGIN OPENSSH PRIVATE KEY-----
b3BlbnNzaC1rZXktdjEAAAAABG5vbmUAAAAEbm9uZQAAAAAAAAABAAAAMwAAAAtzc2gtZW
QyNTUxOQAAACAAggc/HM6HTA5nQMCn3IirUuBhoD42lo2w6kBVRprMCwAAAIi36HVyt+h1
cgAAAAtzc2gtZWQyNTUxOQAAACAAggc/HM6HTA5nQMCn3IirUuBhoD42lo2w6kBVRprMCw
AAAEA0HpVhUPBtxkisfC+w98VSrPXZrAYVcHoFEAvjLFf22ACCBz8czodMDmdAwKfciKtS
4GGgPjaWjbDqQFVGmswLAAAAAAECAwQF
-----END OPENSSH PRIVATE KEY-----