ssh用户密码登录和sshkey登录原理图

本文详细介绍了SSH(安全外壳协议)及其开源实现OpenSSH的基本概念,包括如何通过SSH加密网络通讯,OpenSSH的客户端与服务端工作原理,以及服务器间如何配置免密登录的过程。

原文地址:https://blog.youkuaiyun.com/weixin_37490221/article/details/80823129

SSH即安全外壳协议:专为远程登录会话和其他网络服务提供安全性的协议,通过使用SSH,你可以把所有传输的数据进行加密。

了解OpenSSH
OpenSSH是SSH的免费开源实现,是使用SSH透过计算机网络加密通讯的实现。它是取代由SSH Communications Security所提供的商用版本的开放源代码方案。

OpenSSH 由客户端和服务端的软件组成。服务端是一个守护进程(daemon), 它在后台运行并响应来自客户端的连接请求。服务端一般是 sshd 进程,提供了 对远程连接的处理。

客户端通过SSH远程登录服务器

这里写图片描述
这是客户端与服务器的连接,使用用户名密码的形式登录,而在同一局域网内的服务器与服务器之间则可以使用ssh的免密登录

服务器与服务器间的免密登录

这里写图片描述
配置服务器1与服务器2的免密登录
1.服务器1生成秘钥对

ssh-keygen -t rsa
1
会生成id_rsa.pub和id_rsa两个文件 
2.将生成的公钥(id_rsa.pub)发送给服务器2(authorized_keys)

ssh-copy-id 服务器2的hostname或ip
1
首次链接需要输入用户密码、验证成功后后续免密登陆。当然你通过其他方式粘贴到服务器2的authorized_keys中也是可以的,一个公钥为一行 
3.服务器2生成秘钥对

ssh-keygen -t rsa
1
4.将生成的公钥(id_rsa.pub)发送给服务器1(authorized_keys)

ssh-copy-id 服务器1的hostname或ip
1
总结
由于博主的秘钥对早已生成过,所以就不直接案例展示。
--------------------- 
作者:枣面包 
来源:优快云 
原文:https://blog.youkuaiyun.com/weixin_37490221/article/details/80823129 
版权声明:本文为博主原创文章,转载请附上博文链接!

<think>我们被要求解释SSH登录的工作原理及实现方式。根据提供的引用,SSH(Secure Shell)是一种用于安全远程登录其他安全网络服务的协议。它通过加密通信来防止信息泄露,确保远程管理过程的安全性。 引用中提到了SSH的两种主要认证方式:基于口令的认证基于公钥的认证(免密登录)。我们将分别解释这两种方式的工作原理,并描述SSH连接建立的基本过程。 ### SSH连接建立的基本过程 1. **协议版本协商**:客户端发起连接请求,服务器客户端协商使用哪个SSH协议版本(如SSH-1或SSH-2)。 2. **密钥交换**:双方使用Diffie-Hellman等密钥交换算法生成一个会话密钥(session key),用于后续的对称加密通信。这个过程确保即使网络被监听,第三方也无法获得会话密钥。 3. **认证**:客户端需要向服务器证明自己的身份。常见的认证方式有: - 基于口令的认证(密码认证) - 基于公钥的认证(免密登录) ### 1. 基于口令的认证(Password Authentication) 这是最直接的认证方式,用户输入密码密码通过加密通道传输到服务器进行验证。 - **步骤**: 1. 客户端向服务器发起连接请求。 2. 服务器将自己的公钥发送给客户端(客户端首次连接时需确认服务器公钥指纹,并保存到`~/.ssh/known_hosts`中)。 3. 客户端使用服务器公钥加密一个随机生成的会话密钥,并发送给服务器。 4. 服务器使用自己的私钥解密得到会话密钥,此后双方通信使用该会话密钥进行对称加密。 5. 服务器要求客户端提供用户密码。 6. 客户端将密码通过加密通道发送给服务器。 7. 服务器验证密码是否正确,并返回认证结果。 ### 2. 基于公钥的认证(Public Key Authentication) 这种方式不需要用户每次输入密码,而是使用一对密钥(公钥私钥)进行认证。用户将公钥放在服务器的指定文件中(通常是`~/.ssh/authorized_keys`),而私钥则保留在客户端。 - **步骤**: 1. 客户端向服务器发起连接请求,并声明自己希望使用公钥认证。 2. 服务器检查该用户目录下的`authorized_keys`文件中是否存在客户端的公钥。 3. 如果存在,服务器生成一个随机字符串(challenge),并用客户端的公钥加密,发送给客户端。 4. 客户端使用自己的私钥解密该字符串,得到原始字符串,然后将其与会话密钥(或其他信息)组合,生成一个消息摘要(如MD5或SHA),再发送给服务器。 5. 服务器使用存储的公钥验证消息摘要的正确性。如果验证通过,则认证成功。 引用[5]中描述的公钥登录流程略有不同,但核心思想一致:服务器用公钥加密一个随机字符串,客户端用私钥解密并返回证明,从而证明自己拥有私钥。 ### SSH免密登录(公钥认证)的配置 要实现免密登录,需要在客户端生成密钥对,并将公钥复制到服务器的`authorized_keys`文件中。具体步骤如下(如引用[3]所示): ```bash # 在客户端生成RSA密钥对(-t指定密钥类型,-P指定密码,空字符串表示无密码,-f指定保存位置) $ ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa # 将公钥复制到服务器的authorized_keys文件中(假设已通过其他方式登录服务器) $ cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys # 设置authorized_keys文件的权限(仅允许所有者读写) $ chmod 0600 ~/.ssh/authorized_keys ``` ### SSH协议层 SSH协议分为三层: 1. **传输层协议**:提供服务器认证、保密性完整性。它通常运行在TCP/IP连接上,负责密钥交换加密。 2. **用户认证协议**:负责客户端用户认证。 3. **连接协议**:在加密通道上建立多个逻辑通道,用于交互式登录、端口转发等。 ### 总结 SSH通过加密通信多种认证机制,为远程登录提供了安全保障。其中: - **基于口令的认证**简单易用,但每次需要输入密码。 - **基于公钥的认证**避免了密码输入,且更安全(因为私钥不会离开客户端),但需要预先配置公钥。 在实际应用中,公钥认证常用于自动化脚本服务器管理,而密码认证则适合临时登录。 §§相关问题§§ 1. SSH协议中密钥交换的具体过程是怎样的? 2. 如何配置SSH服务以禁用密码认证,仅允许公钥认证? 3. SSH端口转发(隧道)的工作原理是什么? [^1]: SSH连接原理。ssh是linux系统中的一个远程连接工具,也是一种网络协议,通过各种加密算法达到安全连接的效果。若能使用ssh连接到另外一台机器上,我们就可以认为是安全的。本节主要介绍的是ssh连接的原理以及ssh免密连接的原理。 [^2]: 3、Linux下ssh的原理及免密钥登录。简单说,SSH是一种网络协议,用于计算机之间的加密登录。 [^3]: 经过上面的原理分析,下面三行命令的含义应该很容易理解了: $ ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa $ cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys $ chmod 0600 ~/.ssh/authorized_keys [^4]: SSH原理。 SSH为Secure Shell的缩写,默认端口22,由IETF的网络小组(Network Working Group)所制定;SSH为建立在应用层基础上的安全协议。SSH是目前较可靠,专为远程登录会话其他网络服务提供安全性的协议。利用SSH协议可以有效防止远程管理过程中的信息泄露问题。SSH仅仅是一协议标准,其具体的实现有很多,既有开源实现的OpenSSH,也有商业实现方案。使用范围最广泛的当然是开源实现OpenSSH。 生成公钥私钥的方法: ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa [^5]: SSH登录过程。在上面介绍的登录流程中可以发现,每次登录都需要输入密码,很麻烦。SSH提供了另外一种可以免去输入密码过程的登录方式:公钥登录。流程如下: 图1-5:公钥认证流程 Client端用户TopGun将自己的公钥存放在Server上,追加在文件authorized_keys中。Server收到登录请求后,随机生成一个字符串str1,并发送给Client。Client用自己的私钥对字符串str1进行加密。将加密后字符串发送给Server。Server用之前存储的公钥进行解密,比较解密后的str2str1。根据比较结果,返回客户端登陆结果。</think>### SSH登录的工作原理及实现方式 SSH(Secure Shell)是一种加密网络协议,用于在不安全的网络中提供安全的远程登录命令执行。其工作原理主要分为协议层、加密机制认证方式三个层面,以下是详细解析: --- #### 一、协议层结构(分层模型) SSH协议分为三层: 1. **传输层协议**(TCP端口22) - 负责密钥交换、服务器认证加密通信 - 使用Diffie-Hellman算法协商会话密钥$K_{session}$ - 建立加密通道:$密文 = Encrypt(K_{session}, 明文)$ 2. **用户认证协议** - 支持多种认证方式: - 密码认证(Password) - 公钥认证(PublicKey) - 键盘交互认证(Keyboard-Interactive) 3. **连接协议** - 在单条加密连接上复用多个逻辑通道 - 支持远程Shell会话、文件传输(SCP/SFTP)、端口转发等 --- #### 二、核心认证方式实现原理 ##### 1. 密码认证(默认方式) ```mermaid sequenceDiagram Client->>Server: 发起连接请求 Server->>Client: 发送公钥指纹 Client->>Server: 验证指纹后发送加密的用户名/密码 Server->>Server: 解密并验证密码 Server->>Client: 认证结果 ``` - **特点**:每次登录需输入密码 - **安全机制**:密码通过$K_{session}$加密传输 ##### 2. 公钥认证(免密登录) ```mermaid sequenceDiagram Client->>Server: 发起连接请求(携带公钥ID) Server->>Server: 检查~/.ssh/authorized_keys Server->>Client: 发送随机数$R$(用客户端公钥加密) Client->>Client: 用私钥解密$R$ Client->>Server: 返回$HASH(K_{session} + R)$ Server->>Server: 验证哈希值 Server->>Client: 认证结果 ``` - **配置步骤**(引用[3][4]): ```bash # 客户端生成密钥对 $ ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa # 复制公钥到服务器 $ cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys # 设置权限(关键!) $ chmod 0600 ~/.ssh/authorized_keys ``` - **数学原理**:基于RSA算法$c = m^e \mod n$(加密)$m = c^d \mod n$(解密) --- #### 三、加密保障机制 1. **对称加密**(会话加密) - 算法:AES、ChaCha20 - 密钥:$K_{session}$由Diffie-Hellman协商生成 $$ K_{session} = g^{ab} \mod p $$ ($a$客户端私密,$b$服务端私密,$g$$p$公开参数) 2. **非对称加密**(密钥交换) - 算法:RSA/ECDSA - 服务器用主机密钥证明身份(公钥存储在`/etc/ssh/ssh_host_rsa_key.pub`) 3. **完整性验证** - HMAC-SHA256防止数据篡改 $$ MAC = SHA256(K_{mac} + 报文) $$ --- #### 四、完整登录流程示例 1. TCP三次握手建立连接 2. 交换协议版本(例如:SSH-2.0-OpenSSH_8.9) 3. 密钥交换: - 客户端生成临时密钥对$(e, N)$ - 服务端返回签名$Sign_{host}(HASH(参数))$ 4. 用户认证: ```bash # 客户端发起 $ ssh -i ~/.ssh/id_rsa user@host ``` 5. 启动会话: - 分配伪终端(PTY) - 建立标准I/O通道 --- #### 五、安全增强实践 1. **禁用密码登录**(仅用公钥): ```bash # /etc/ssh/sshd_config PasswordAuthentication no ``` 2. **端口变更**: ```bash Port 2222 # 避免默认端口扫描 ``` 3. **防火墙限制**: ```bash $ ufw allow from 192.168.1.0/24 to any port 22 ``` > **关键点**:SSH的安全性依赖于**密钥管理**(私钥保密)**算法强度**(使用Ed25519而非过时的RSA-2048)[^1][^4]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值