SSH安全登陆原理:密码登陆与公钥登陆

SSH全称(Secure SHell)是一种安全的应用层网络协议,用于计算机间的安全通信,是目前一套成熟的远程登陆解决方案。 有两种方法登陆:

  • 密码登陆
  • 公钥登陆

密码登陆

1.客户端填写用户名密码发起远程登陆

2.远端服务器收到登陆请求后,会将本地的一个公钥发送给客户端

3.客户端收到公钥后,将自己的登陆信息用远端服务器的公钥加密,并将加密后的结果发送给远端服务器。

4.远端服务器收到登陆密文后,用本地私钥解密,拿到登陆信息到数据库比较。登陆信息无误时,显示登陆成功。有误时就报错。

5.登陆成功后,客户端将会将远端服务器的公钥保存到本地,等下次再登陆时,客户端检测到收到的公钥已经在本地存在(通常保存的目录:==$HOME/.ssh/known_hosts==),就不会报警告了

提示: 在密码登陆进行到第2步时,客户端收到了服务器的公钥,但是不确定这个公钥到底是不是要访问的目标服务器(也可能时中间攻击者,发送过来的假公钥)。此时会有提示

# ssh user@host
The authenticity of host 'host (18.18.229.21)' can't be established.
RSA key fingerprint is 98:2e:d7:e0:de:9f:ac:67:28:c2:42:2d:37:16:58:4d.
  Are you sure you want to continue connecting (yes/no)?
复制代码

如果确定这个公钥就是目标服务器发过来的公钥,就点击yes,完成登陆。

公钥登陆

公钥登陆相对密码登陆可以避免中间攻击,同时也简单很多

1.客户端在本地生成一对公私钥

2.将客户端本地生成的公钥手动添加到远端服务器上

3.客户端发起登陆请求到远端服务器

4.远端服务器收到请求后,会本地生成一串随机字符,并将该随机字符串发送给客户端

5.客户端收到远端服务器的随机字符串后,用本地私钥加密,并将密文传给远端服务器

6.远端服务器将收到的密文用保存的客户端公钥解密,并将解密结果与原随机字符串对比,若一致的话证明客户端可信,允许登陆。

提示: 客户端生成公私钥的步骤如下: 第一步:在本地机器上使用ssh-keygen产生公钥私钥对 执行命令:

ssh-keygen -t rsa -C "150321****@163.com"

-t :表示加密类型 -C :表示密钥标示字符串

第二步:将公钥id_rsa.pub添加到GITLab中的SSHKEY上 执行命令:

192:~ zhoufei$ cd ~/.ssh
192:.ssh zhoufei$ cat id_rsa.pub
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDBQYZidTBczPtJ22xNJwl7Pq+yaZnualVS8juad3Oq+w6v5kgin9sW+xs7w9qrGmWHTkkOIPvckmqY7qobazI32YzI9IKFE2yGm51H1pXM4t9iEB0OCHdy1s1D2gB/bNI2ZJPhDjLOfbGO1Mj9B85n8WR0dy8eYSRBhUneiKor8ENnCvP1Sw4XOsEg6aDCMNRCzDY94Ar4ps41hcg34dNS2eMPsXMrTrz8fCv+IbBltUMDVdcoEFwb8VyYZ8ZspbY6zzRc1nZ5flhfGoB6Zjmmz2tSGCnNS16GdTpoGJd+UaiqrWNuocYWorPocbeMiIi+duZfvYVRNDCmaN0zUlwl****[email protected]
复制代码

若添加后,无法正常拉取和提交,就本地查询是否有客户端身份信息

abcdeMacBook-Pro:.ssh zhoufei$ ssh-add -L
The agent has no identities.
复制代码

解决方法:

abcdeMacBook-Pro:.ssh zhoufei$ ssh-add
Enter passphrase for /Users/zhoufei/.ssh/id_rsa:
Identity added: /Users/zhoufei/.ssh/id_rsa (/Users/zhoufei/.ssh/id_rsa)
复制代码

转载于:https://juejin.im/post/5be5a813f265da613437e9f6

你可能感兴趣的:(SSH安全登陆原理:密码登陆与公钥登陆)