在使用基于密码的身份验证的机器上建立 ssh 连接时会发生哪些步骤?

在使用基于密码的身份验证的机器上建立 ssh 连接时会发生哪些步骤?

我想知道在建立 ssh 连接时幕后发生了什么,我的意思是直到我们从 Linux 机器进入 Linux 中的 shell。我知道在 ssh 连接中密码不是以纯文本形式发送的。那么他们如何加密连接呢?在这里我假设我还没有生成我的公钥/私钥。我使用密码进行身份验证。所以我认为在保护连接之前不能交换密钥。我在 google 和 serverfault 上搜索过,但没有找到。我在 serverfault 上找到的最接近的是这篇文章ssh 在进行密钥协商时到底发送什么?
上面的帖子假设用户通过公钥交换进行连接。但我正在寻找一种不使用公钥/私钥来保护连接的情况。它如何在我输入密码之前加密连接。它使用什么来保护连接,以便密码不会发送纯文本?

答案1

当你安装 SSH 并首次启动时,它将为机器,对于每个用户来说都是相同的。连接后,两台机器将交换其公钥部分(纯文本),并使用它们加密主机之间的通信。密钥交换后,通信将切换到加密模式。

然后,将在每个用户~/.ssh/known_hosts文件中存储密钥,并与下次连接时发送的密钥进行比较。这就是您在尝试连接到最近重新安装的计算机时会收到错误的原因:在执行此操作时,您生成了新的计算机密钥对,这与缓存的版本不匹配,这也可能意味着有人试图发起攻击。

答案2

RFC 4252解释了使用 SSH 进行身份验证的工作原理以及其中涉及的步骤。当然,该规范读起来很麻烦,因此最简单的方法可能是ssh使用一个或多个详细 ( -v) 标志运行,因为它会打印出所有调试输出,解释它正在做什么。

这是一个示例案例(我更改了用户名和主机名)。使用ssh -vv而不是ssh -v将提供更多详细信息:

[user@gromp ~]$ ssh -v [email protected] 
OpenSSH_5.5p1 Debian-6, OpenSSL 0.9.8o 01 Jun 2010
debug1: Reading configuration data /etc/ssh/ssh_config
debug1: Applying options for *
debug1: Connecting to example.org [1.2.3.4] port 22.
debug1: Connection established.
debug1: identity file /home/user/.ssh/id_rsa type -1
debug1: identity file /home/user/.ssh/id_rsa-cert type -1
debug1: identity file /home/user/.ssh/id_dsa type -1
debug1: identity file /home/user/.ssh/id_dsa-cert type -1
debug1: Remote protocol version 1.99, remote software version OpenSSH_5.8
debug1: match: OpenSSH_5.8 pat OpenSSH*
debug1: Enabling compatibility mode for protocol 2.0
debug1: Local version string SSH-2.0-OpenSSH_5.5p1 Debian-6
debug1: SSH2_MSG_KEXINIT sent
debug1: SSH2_MSG_KEXINIT received
debug1: kex: server->client aes128-ctr hmac-md5 none
debug1: kex: client->server aes128-ctr hmac-md5 none
debug1: SSH2_MSG_KEX_DH_GEX_REQUEST(1024<1024<8192) sent
debug1: expecting SSH2_MSG_KEX_DH_GEX_GROUP
debug1: SSH2_MSG_KEX_DH_GEX_INIT sent
debug1: expecting SSH2_MSG_KEX_DH_GEX_REPLY
debug1: Host 'example.org' is known and matches the RSA host key.
debug1: Found key in /home/user/.ssh/known_hosts:1
debug1: ssh_rsa_verify: signature correct
debug1: SSH2_MSG_NEWKEYS sent
debug1: expecting SSH2_MSG_NEWKEYS
debug1: SSH2_MSG_NEWKEYS received
debug1: Roaming not allowed by server
debug1: SSH2_MSG_SERVICE_REQUEST sent
debug1: SSH2_MSG_SERVICE_ACCEPT received
debug1: Authentications that can continue: publickey,password,keyboard-interactive,hostbased
debug1: Next authentication method: publickey
debug1: Trying private key: /home/user/.ssh/id_rsa
debug1: Trying private key: /home/user/.ssh/id_dsa
debug1: Next authentication method: keyboard-interactive
debug1: Authentications that can continue: publickey,password,keyboard-interactive,hostbased
debug1: Next authentication method: password
[email protected]'s password: 
debug1: Authentication succeeded (password).
debug1: channel 0: new [client-session]
debug1: Requesting [email protected]
debug1: Entering interactive session.
debug1: Sending environment.
debug1: Sending env LANG = en_US.UTF-8
[[email protected]~]$

相关内容