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