linux - SSH登陆未生成公钥为什么说传给了客户端?
怪我咯
怪我咯 2017-04-17 15:52:48
[Linux讨论组]

我再学习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)
PHPz

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

天蓬老师

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

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

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

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

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

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

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

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号