zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    mysql中的几种join 及 full join问题
    MySQL基础练习题
    SQL之IFNULL()
    SQL之查找表中字段的值相同的记录
    Mysql之将一张表内容导入另一张表中
    selenium无界面操作浏览器与Chrome Options的启动项设置
    SQL UNION 和 UNION ALL 操作符
    Python断言方法assert
    Python标准库--contextlib模块
    Python标准库--itertools模块
  • 原文地址:https://www.cnblogs.com/hustdc/p/8638847.html
Copyright © 2011-2022 走看看