SSH之所以能够完成免密登录主要是因为它运用了一个简单的机制来确保当前登录操作的环境是安全可靠的。其实就是确认了用户登录时使用的主机和远程服务器主机之间的相互依赖和信任的关系。

        1.SSH密码登录过程是如下:(以下的用户即为client端,远程主机即为server端)

  • 用户向远程主机发登录请求:ssh user@远程主机(命令)
  • 远程主机收到用户的登录请求,把自己的公钥发给用户。
  • 用户使用这个公钥,将登录密码加密后,发送回远程主机。
  • 远程主机用自己的私钥,解密登录密码,如果密码正确,就同意用户登录。

python ssh2免密登录 ssh免密登录原理_python ssh2免密登录

 上面密码登录可能会被黑客劫持,也就是中间人攻击:

python ssh2免密登录 ssh免密登录原理_用户登录_02

 但是ssh已经利用hosts确认解决了这个问题(可能不是特别安全)

        2.SSH免密登录过程如下:(以下的用户即为client端,远程主机即为server端)

  • 用户将自己的公钥存放在远程主机上,追加在文件authorized_keys中
  • Client将自己的公钥存放在Server上。需要用户手动将公钥copy到server上。这就是在配置ssh的时候进程进行的操作。下图是GitHub上SSH的keys(公钥)设置视图:
  • 远程主机接收到用户发起的连接请求后,从authorized_keys中寻找这个用户的pubkey,并生成随机数R,远程主机将这个R用这个pubkey加密得到pubKey®,然后将这个pubKey®发送给用户
  • 用户利用自己的私钥解密这个pubKey®,得到R,然后对R和本次会话的SessionKey利用MD5生成摘要Digest1,发送给远程主机
  • 远程主机也对R和本次会话的SessionKey利用同样的摘要算法生成Digest2
  • 远程主机对比Digest1和Disgest2是否相同,从而完成认证过程

python ssh2免密登录 ssh免密登录原理_ssh_03

注意:
1)公钥是用来加密的,私钥是用来解密的。

2)SSH是一种非对称性加密

对称加密:

对称加密是指加密和解密使用同一个密钥的方式,一方通过密钥将信息加密后,把密文传给另一方,另一方通过这个相同的密钥将密文解密,转换成可以理解的明文。

非对称加密:

使用一对非对称密钥加密,即公钥和私钥,公钥可以随意发布,任何人都能获得,但私钥只有自己知道,发送密文的一方使用对方的公钥进行加密处理,对方接收到加密信息后,使用自己的私钥进行解密。公开密钥与私有密钥是一对,如果用公开密钥对数据进行加密,只有用对应的私有密钥才能解密;如果用私有密钥对数据进行加密,那么只有用对应的公开密钥才能解密。因为加密和解密使用的是两个不同的密钥,所以叫作非对称加密。