服务器测评网
我们一直在努力

linux ssh-keygen生成密钥后,如何配置才能免密登录远程服务器?

Linux SSH Keygen 的基本概念与重要性

在 Linux 系统管理中,SSH(Secure Shell)是一种加密的网络协议,用于远程登录、数据传输和命令执行,传统的密码认证方式虽然简单,但存在暴力破解、密码泄露等安全风险,而 SSH 密钥认证通过非对称加密技术(公钥和私钥)实现更安全的身份验证,已成为现代服务器管理的标准实践。

linux ssh-keygen生成密钥后,如何配置才能免密登录远程服务器?

ssh-keygen 是 SSH 套件中用于生成和管理 SSH 密钥对的命令行工具,它支持多种加密算法(如 RSA、ECDSA、Ed25519 等),能够生成公钥和私钥,并将公钥部署到远程服务器,实现免密码登录,与密码认证相比,密钥认证具有更高的安全性、更强的抗破解能力,同时可简化自动化脚本和批量管理操作。

SSH 密钥的生成原理与算法选择

SSH 密钥基于非对称加密技术,包含一对密钥:私钥(存储在本地,需严格保密)和公钥(部署到远程服务器,用于验证私钥合法性),当用户通过 SSH 连接远程服务器时,服务器会使用公钥加密一个随机数,用户需用私钥解密该数以证明身份。

ssh-keygen 支持多种密钥算法,不同算法在安全性、性能和兼容性上存在差异:

算法 密钥长度 特点 适用场景
RSA 2048/4096 位 兼容性最好,广泛支持;4096 位安全性高,但生成和验证速度较慢 通用场景,兼容旧版系统
ECDSA 256/384/521 位 基于椭圆曲线,安全性高且速度快;521 位安全性接近 4096 位 RSA 现代系统,追求性能与平衡
Ed25519 256 位 最新算法,安全性极高,生成和验证速度最快;但部分旧版 SSH 客户端不支持 新建系统,支持最新 SSH 版本

推荐选择

  • 新建系统优先选择 Ed25519(安全性、性能最优);
  • 需兼容旧版系统时选择 RSA 4096
  • 避免使用低于 2048 位的 RSA 密钥(存在安全风险)。

使用 ssh-keygen 生成密钥对

基本语法与参数

ssh-keygen 的基本语法为:

ssh-keygen [选项] [-t 类型] [-b 位数] [-f 文件名] [-C 注释]

常用参数说明:

  • -t:指定密钥类型(如 rsaecdsaed25519);
  • -b:指定密钥长度(如 4096256);
  • -f:指定密钥文件名(默认为 ~/.ssh/id_rsa);
  • -C:添加注释(通常用于标识密钥用途,如 user@hostname);
  • -N:设置私钥密码(可选,用于保护私钥文件)。

生成 RSA 4096 位密钥对

以生成 RSA 4096 位密钥为例,执行以下命令:

ssh-keygen -t rsa -b 4096 -C "admin@server1"

执行后,工具会提示输入密钥文件保存路径(直接回车使用默认路径 ~/.ssh/id_rsa)和私钥密码(可留空,但建议设置)。

生成 Ed25519 密钥对

若系统支持 OpenSSH 6.5+,可直接生成 Ed25519 密钥:

ssh-keygen -t ed25519 -C "admin@server2"

Ed25519 密钥生成速度更快,且私钥文件更小(通常仅几十字节)。

密钥文件的结构

生成密钥后,~/.ssh/ 目录下会创建以下文件:

linux ssh-keygen生成密钥后,如何配置才能免密登录远程服务器?

  • 私钥文件(如 id_rsaid_ed25519):权限自动设置为 600(仅所有者可读写),需严格保密;
  • 公钥文件(如 id_rsa.pubid_ed25519.pub):权限自动设置为 644,可公开分享;
  • 认证文件authorized_keys):存储远程服务器的公钥列表(需手动将公钥追加至此文件)。

SSH 密钥的部署与使用

将公钥复制到远程服务器

生成密钥后,需将公钥(.pub 文件)内容添加到远程服务器的 ~/.ssh/authorized_keys 文件中,推荐使用 ssh-copy-id 命令自动完成:

ssh-copy-id -i ~/.ssh/id_rsa.pub user@remote_host

执行后,输入远程服务器密码,工具会自动创建远程 .ssh 目录(权限 700),并将公钥追加到 authorized_keys(权限 600)。

ssh-copy-id 不可用,也可手动复制公钥内容:

cat ~/.ssh/id_rsa.pub | ssh user@remote_host "mkdir -p ~/.ssh && cat >> ~/.ssh/authorized_keys"

配置 SSH 客户端免密码登录

完成公钥部署后,可通过以下命令测试免密码登录:

ssh user@remote_host

若配置正确,无需输入密码即可登录。

禁用密码登录(增强安全性)

为提升服务器安全性,可在远程服务器的 SSH 配置文件 /etc/ssh/sshd_config 中禁用密码登录:

PasswordAuthentication no
PubkeyAuthentication yes

修改后重启 SSH 服务:

sudo systemctl restart sshd

SSH 密钥的管理与维护

列出已生成的密钥

使用以下命令查看本地已生成的密钥:

ls -la ~/.ssh/

输出示例:

-rw------- 1 user user 3247 2023-10-01 10:00 id_rsa  
-rw-r--r-- 1 user user  768 2023-10-01 10:00 id_rsa.pub  
-rw------- 1 user user  411 2023-10-02 11:00 id_ed25519  
-rw-r--r-- 1 user user  102 2023-10-02 11:00 id_ed25519.pub  

修改私钥密码

若私钥未设置密码或需修改密码,使用以下命令:

ssh-keygen -p -f ~/.ssh/id_rsa

按提示输入当前密码(若未设置则直接回车)和新密码。

linux ssh-keygen生成密钥后,如何配置才能免密登录远程服务器?

删除或重命名密钥

若密钥泄露或不再使用,可直接删除对应文件:

rm ~/.ssh/id_rsa ~/.ssh/id_rsa.pub

重命名密钥文件时,需同时修改私钥和公钥文件名,并更新 SSH 客户端配置(如 ~/.ssh/config 中的 IdentityFile 指向)。

多密钥管理

当需要管理多个服务器时,可通过 ~/.ssh/config 文件为不同服务器指定不同的私钥:

Host server1  
    HostName 192.168.1.100  
    User admin  
    IdentityFile ~/.ssh/id_rsa_server1  
Host server2  
    HostName 192.168.1.101  
    User root  
    IdentityFile ~/.ssh/id_ed25519_server2  

配置后,可通过 ssh server1 直接连接,无需指定 -i 参数。

SSH 密钥的安全最佳实践

  1. 设置强密码:为私钥设置复杂密码(长度至少 12 位,包含大小写字母、数字和特殊符号);
  2. 限制私钥权限:确保私钥文件权限为 600,避免其他用户读取;
  3. 定期轮换密钥:建议每 6-12 个月更换一次密钥,特别是用于高权限账户时;
  4. 禁用 root 直接登录:通过密钥管理普通用户账户,再通过 sudo 提权,减少 root 密钥泄露风险;
  5. 使用 SSH 代理:通过 ssh-agent 缓存私钥密码,避免频繁输入(适合自动化脚本场景)。

常见问题与解决方案

问题:Permission denied (publickey,password)

原因

  • 远程服务器 authorized_keys 文件权限错误(非 600);
  • 本地私钥文件权限错误(非 600);
  • 远程 SSH 服务未启用公钥认证。
    解决

    # 修复远程服务器权限
    chmod 600 ~/.ssh/authorized_keys  
    chmod 700 ~/.ssh  

修复本地私钥权限

chmod 600 ~/.ssh/id_rsa


#### 2. 问题:`Bad permissions: ignore key: ~/.ssh/id_rsa`  
**原因**:私钥文件权限过于开放(如 `644`)。  
**解决**:  
```bash
chmod 600 ~/.ssh/id_rsa  

问题:Ed25519 not supported

原因:远程服务器 SSH 版本过低(低于 OpenSSH 6.5)。
解决:改用 RSA 密钥或升级服务器 SSH 版本。

ssh-keygen 是 Linux 系统中实现安全远程管理的核心工具,通过合理选择密钥算法、正确生成和部署密钥对,并结合安全配置,可有效提升服务器安全性、简化运维操作,在实际使用中,需遵循安全最佳实践,定期维护密钥,确保 SSH 连接的稳定与安全。

赞(0)
未经允许不得转载:好主机测评网 » linux ssh-keygen生成密钥后,如何配置才能免密登录远程服务器?