SSH 免密原理及配置

本文详细介绍了SSH的认证原理,包括输入密码验证和密钥验证方式,重点讲解了SSH免密登录的配置步骤,包括生成公私钥、上传公钥到远程服务器、配置授权文件以及进行免密登录的测试。同时,提到了Windows环境下配置SSH连接的额外步骤,确保安全高效地实现远程服务器访问。

一、认证原理

1.输入密码(口令)验证

 用户在客户端ssh远程服务器,远程服务器将自己的公用密钥下发至客户端的~/.ssh/known_hosts ,也就是我们连接一台新服务器时的会输入 yes 的过程,客户端将使用该公开密钥来加密数据,远程服务器使用自己的私有密钥来解密数据,从而实现加密访问过程。

 2. 免密登录(秘钥)验证

 

 

首先在客户端创建一对密匙,手动把公钥放在远程服务器的可信任列表中 cd ~/.ssh/authorized_keys。

当客户端SSH连接服务器时,客户端携带着公钥向服务器发出链接请求,远端服务器收到请求后,在 ~/.ssh/authorized_keys信任文件里比对该公钥是否存在,如果对比成功,远端服务器则使用该公钥加密一个随机字符串(challenge),然后发送给客户端。客户端接收到该服务器回来的请求后,将随机字符串(challenge)用自己的私钥进行解密,之后再将解密后的结果传给远端服务器,远端服务器对比传来的字符串是否一致,一致则建立连接。

对称加密和非对称加密的结合,使得通信安全和效率上大大的提高。

1 . 对称密钥加密是指加密和解密使用同一个密钥的方式,这种方式存在的最大问题就是密钥发送问题,即如何安全地将密钥发给对方。

2. 非对称加密指使用一对非对称密钥,即:公钥和私钥,公钥可以随意发布,但私钥只有自己知道。发送密文的一方使用对方的公钥进行加密处理,对方接收到加密信息后,使用自己的私钥进行解密。

由于非对称加密的方式不需要发送用来解密的私钥,所以可以保证安全性。但是和对称加密比起来,它非常的慢,所以我们还是要用对称加密来传送消息,但对称加密所使用的密钥我们可以通过非对称加密的方式发送出去。

二、ssh 免密配置

1. 在本地生成公私密钥 (/home/username/.ssh/)

ssh-keygen -t rsa

2. 将本地的公钥上传到远程服务器的用户信任列表

scp id_rsa.pub username@192.168.*.*:/home/username/.ssh/

3. 检查远程服务器可信任列表

cd ~/.ssh/
cat id_rsa.pub >> authorized_keys

4. 免密登录

ssh username@192.168.*.*

5. Windows 还需配置一个 config 文件

# 进入.ssh
cd ~/.ssh/
# 新建config
vim config
# 添加以下内容
  Host usa_server
  HostName 192.168.*.*
  User user
  Port 22
  IdentityFile "C:\Users\username\.ssh\id_rsa"
# 保存
# ssh别名链接验证
ssh usa_server

参考链接:

 ssh免密登录原理与实现

Windows使用xshell ssh免密连接Linux虚拟机

<think>我们正在讨论SSH免密登录的验证方法。根据用户提供的引用,我们知道SSH免密登录原理配置步骤。现在用户想知道如何验证配置是否成功。 验证方法通常包括: 1. 直接使用SSH命令连接目标主机,观察是否需要输入码。 2. 检查调试输以了解认证过程。 3. 使用自动化脚本测试。 由于用户之前遇到了配置免密登录后仍需输入码的问题,所以我们不仅要给验证方法,还要给诊断失败原因的方法。 根据之前的回答,我们提到了一个诊断脚本,这里可以再次强调验证步骤。 验证SSH免密登录是否成功的步骤如下: ### 1. 直接连接测试 在源主机上执行: ```bash ssh dst@9.168.2.3 ``` 如果无需输入码就能登录,则免密登录成功。 ### 2. 执行远程命令测试 更简洁的方法是执行一条远程命令而不进入交互式shell,例如: ```bash ssh dst@9.168.2.3 "echo 'Hello, SSH!'" ``` 如果成功输`Hello, SSH!`且没有提示输入码,则免密登录成功。 ### 3. 检查详细日志 如果上述命令仍然要求输入码,则可以开启SSH的详细模式(verbose)查看原因: ```bash ssh -vvv dst@9.168.2.3 ``` 在输中查找关键信息: - `Authentications that can continue: publickey` 表明尝试使用公钥认证。 - `Offering public key` 表明客户端提供了公钥。 - `Authentication succeeded (publickey)` 表明公钥认证成功。 如果现`Permission denied (publickey)`,则表明公钥认证失败。 ### 4. 使用诊断脚本 参考之前提供的`check_ssh_auth.sh`脚本,可以自动检查本地私钥权限、远程文件权限和SSH服务端配置。 ### 5. 检查目标主机的日志 在目标主机上,可以查看SSH服务端的日志(通常位于`/var/log/auth.log`或`/var/log/secure`),搜索连接尝试的记录。 ### 验证成功的关键点 - 客户端能够自动使用私钥进行认证。 - 服务端的`authorized_keys`文件包含客户端的公钥。 - 相关文件的权限正确(如`.ssh`目录为700,`authorized_keys`为600)。 - SSH服务端配置允许公钥认证。 ### 示例:验证免密登录 假设目标用户为`dst`,目标主机IP为`9.168.2.3`,在源主机上运行: ```bash # 测试连接 ssh dst@9.168.2.3 "echo '恭喜!SSH免密登录配置成功。'" ``` 如果输该字符串,则证明配置成功[^1][^2]。 ### 常见问题排查 如果验证失败,请检查: 1. 目标主机的`~/.ssh/authorized_keys`文件是否包含正确的公钥(注意不要有多余的空格或换行)。 2. 目标主机上`.ssh`目录和文件的权限。 3. 源主机上私钥的权限(应为600)。 4. SSH服务端配置(`/etc/ssh/sshd_config`)中`PubkeyAuthentication`是否为`yes`。 §§相关问题§§ 1. SSH公钥认证失败时,如何通过调试信息定位问题? 2. 如何配置SSH服务端以禁用码登录,仅允许公钥认证? 3. 在自动化脚本中如何实现无交互的SSH免密登录测试? </think>### 验证 SSH 免密登录是否配置成功的方法 #### 1. 直接连接测试(最可靠方法) 在源主机(如 `9.168.2.7`)执行: ```bash ssh dst@9.168.2.3 ``` 若无需输入码直接进入目标主机终端,表示配置成功[^1]。 #### 2. 执行远程命令测试 ```bash ssh dst@9.168.2.3 "echo 'SSH免密登录成功!'" ``` 若直接返回输信息且无码提示,证明配置成功[^2]。 #### 3. 使用调试模式检查认证流程 ```bash ssh -vvv dst@9.168.2.3 2>&1 | grep -i "authenticat" ``` 检查关键日志: ``` debug1: Authentication succeeded (publickey) ✅ # 成功标志 debug1: Authentications that can continue: publickey,password ❌ # 失败标志 ``` #### 4. 钥使用验证 ```bash ssh -T -o "IdentitiesOnly=yes" -i ~/.ssh/id_rsa dst@9.168.2.3 ``` `-i` 显式指定私钥文件,确认钥对匹配正确。 #### 5. 快速验证脚本 创建 `verify_ssh.sh`: ```bash #!/bin/bash target="dst@9.168.2.3" echo "测试SSH连接..." ssh -o ConnectTimeout=5 -T $target "echo '|| 免密登录成功 ||'" && \ echo "✅ 验证成功:SSH免密登录已启用" || \ echo "❌ 验证失败:请检查配置" ``` 执行:`chmod +x verify_ssh.sh && ./verify_ssh.sh` #### 验证要点总结 | 验证层级 | 成功标志 | 失败处理 | |---------|---------|----------| | 连接测试 | 直接进入终端 | 检查 authorized_keys 权限[^1] | | 命令执行 | 返回预期输 | 确认 sshd_config 配置[^2] | | 日志分析 | `Authentication succeeded` | 检查钥文件权限 | | 显式钥 | 无需码连接 | 验证钥匹配性 | > **注意**:若连接时现 `The authenticity of host...` 提示属正常现象,这是首次连接时的主机指纹验证。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值