linux - SSH登陆未生成公钥为什么说传给了客户端?

 mobiledu2502854077 发布于 2022-11-01 20:37

我再学习SSH登陆的时候google搜索到的各种资料基本都会说到这样一段:

在 SSH 使用密码的方式登陆整个过程是这样的:
(1)远程主机收到用户的登录请求,把自己的公钥发给用户。(2)用户使用这个公钥,将登录密码加密后,发送回来。(3)远程主机用自己的私钥,解密登录密码,如果密码正确,就同意用户登录。

这段是在描述这样的一个过程:

$ ssh foo@remote_serv
The authenticity of host 'virtural (xxx.xxx.xxx.xxx)' can't be established.
ECDSA key fingerprint is SHA256:0yMAAeWwuLywagT2CORdVWO4uHTGILtrh+0XRah6FWQ.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added 'virtural,xxx.xxx.xxx.xxx' (ECDSA) to the list of known hosts.
foo@virtural's password: 
Welcome to Ubuntu 16.04.1 LTS (GNU/Linux 4.4.0-38-generic x86_64)

Last login: Tue Sep 27 18:28:34 2016 from xxx.xxx.xxx.xxx
foo@@localhost:~$

注意: 本次SSH使用密码登陆的

亲测实践过程:

  • remote_serv(远程主机) foo 用户并未生成公钥和密钥,也就是 /home/foo/.ssh/目录下并未存在 id_rsa.pub和id_rsa之类的密钥文件;

  • 本地主机 bar 用户并未生成公钥和密钥,也就是/home/bar/.ssh/目录下并未存在 id_rsa.pub和id_rsa之类的密钥文件;

  • 本地主机 bar 用户运行 ssh foo@remote_serv, 输入yes加入known_hosts后再输入密码可成功登入 remote_serv


疑问: 远程主机未生成公钥和私钥,如何发送自己的公钥给本地主机用于本地主机加密登陆密码呢?

截图如下:

2 个回答
  • 公钥认证跟你上面贴出来的过程不是一个问题。

    通过普通密码登录的时候,为了防止密码被中间人截获,需要利用非对称加密理论,这里发送给客户端的公钥是sshd程序生成的,跟用户无关。

    通过公钥登录的过程,无需传输密码

    1. 服务端生成一段随机字符串,给客户端

    2. 客户端用自己的私钥加密这个字符串,将加密结果发给服务端

    3. 服务端用存储在该用户目录下的公钥解开,并对于字符串

    所以实际上,两种登录方式,刚好相反。

    2022-11-02 18:55 回答
  • ……难道生成的公私钥就一定要存在于.ssh目录下吗?……
    ……难道OpenSSH就不能把它存在于内存中吗?……
    ……更何况为了保证安全,这个公私钥是动态生成的,不是固定不变的……
    …….ssh文件夹只是用在使用公私钥登录的时候,而非使用其他方式登录的时候……

    2022-11-02 19:11 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有