ssh原理【转】

1 转自

http://www.ruanyifeng.com/blog/2011/12/ssh_remote_login.html

2 ssh远程登陆的原理

普通用户远程登陆

ssh jason@host

root用户远程登陆

ssh root@host

如果本地用户名和远程用户名相同,可以直接ssh  host

当openssh服务器收到远程登陆请求的时候,它会把自己的公钥发送给发起请求的机器,发起请求的机器用该公钥对该用户密码进行加密,然后发送给openssh服务器,openssh服务器用自己的私钥解密,然后比对密码,如果一样,那么就允许该用户远程登陆,否则登陆失败。

普通用户直接登录即可,但是root用户需要配置一下:

修改/etc/ssh/sshd_config的PermitRootLogin为yes,然后重启一下sshd服务。

3 中间人攻击

这个远程登陆过程看起来高明,但是存在一个缺陷,那就是中间人攻击。

如果登陆请求被中间人截获,它可以模拟服务器发一个自己的公钥过来,那么密码就被它窃取了。

避免中间人攻击的方法,官方服务器公示自己的公钥,然后在用户第一次登陆的时候,会有提示:

ECDSA key fingerprint is SHA256:e27/UCrQmDnO06Fc7gP/2ixI5lkFaG9hNXtcXqRmmq8.
Are you sure you want to continue connecting (yes/no)? yes
如果对上了,那么就说明可以安全的用这个公钥加密密码了,因为就算被中间人窃取了,他也解密不了,因为他没有私钥。

4 无秘钥ssh登陆的原理

想要登陆方也生成一对秘钥,他将自己的公钥放到被登陆的服务器上,然后发起登陆请求,被登陆的服务器发送一段随机字符串给他,他用自己的私钥加密,然后回复给被登陆服务器,被登陆服务器用公钥解密,如果是正确的,就允许登陆。由于只有可信的用户才能放公钥到被登陆的服务器,因此整个过程是可信的。

命令:

生成公钥,ssh-keygen

向被登陆机器发送公钥,ssh-copy-id user@host

 

posted @ 2018-03-24 14:28  PhoenixTree(梧桐树)  阅读(166)  评论(0编辑  收藏  举报