696 字
3 分钟
[配置] SSH 免密登录
IMPORTANT本教程将指导您完成 Linux 服务器与客户端的 SSH 密钥配置,实现安全、便捷的无密码登录体验
Linux 服务器端配置
NOTE适用范围:Ubuntu, Debian, CentOS, Rocky, Fedora 等 Linux 发行版
1. 安装 OpenSSH 服务
sudo apt update && sudo apt install openssh-server -ysudo systemctl enable --now sshsudo dnf install openssh-server -ysudo systemctl enable --now sshd2. 检查 SSHD 配置
确保公钥认证功能已开启:
sudo nano /etc/ssh/sshd_config确保以下行未被注释:
PubkeyAuthentication yesAuthorizedKeysFile .ssh/authorized_keys配置项说明
- PubkeyAuthentication yes:允许使用公钥进行身份验证,是实现免密登录的核心开关
- AuthorizedKeysFile .ssh/authorized_keys:指定存放允许连接的客户端公钥的文件路径,通常位于用户家目录的
.ssh文件夹下为什么注释掉也能登录? 现代 OpenSSH 服务通常将上述值作为默认设置,即使配置文件中未显示开启或被注释,系统也会默认执行这些规则。
那还需要取消注释吗? 虽然大部分系统默认支持,但显式取消注释(即手动开启)可以确保配置的唯一性与确定性,防止在某些安全加固或精简版 Linux 发行版中因默认值不同而导致失效。
重启生效Terminal window sudo systemctl restart ssh # 或 sshd
基础连接测试
在配置免密登录前,请确保客户端能够通过传统密码方式成功连接服务器:
ssh user@10.0.0.56进阶:配置别名在客户端修改
~/.ssh/config文件,配置后只需输入ssh myserver即可连接:~/.ssh/config Host myserverHostName 10.0.0.56User userPort 22IdentityFile ~/.ssh/id_ed25519
免密登录设置
完成基础连接后,按照以下步骤生成密钥并完成推送:
第一步:生成密钥对
根据您的客户端平台选择对应命令:
Windows 客户端
-
环境检查:在 PowerShell 执行
Get-WindowsCapability -Online | Where-Object Name -like 'OpenSSH.Client*' -
生成命令:
Terminal window ssh-keygen -t ed25519 -C "windows-client"
Linux 客户端
-
环境检查:执行
ssh -V -
生成命令:
Terminal window ssh-keygen -t ed25519 -C "linux-client"
第二步:推送公钥至服务器
Windows (PowerShell 管道方式)
在 PowerShell 中执行以下命令(注意替换 user 和 ip):
Get-Content $HOME\.ssh\id_ed25519.pub | ssh user@10.0.0.56 ` "mkdir -p ~/.ssh && chmod 700 ~/.ssh && cat >> ~/.ssh/authorized_keys && chmod 600 ~/.ssh/authorized_keys"Linux (ssh-copy-id 方式)
使用内置的快捷工具:
ssh-copy-id -i ~/.ssh/id_ed25519.pub user@10.0.0.56配置完成后即可实现无感登录体验
关键权限规范
WARNING权限配置错误会导致公钥登录失效,请在 服务器端 严格执行:
| 文件/目录 | 建议权限 | 命令参考 |
|---|---|---|
~ (用户家目录) | 755 | chmod 755 ~ |
~/.ssh | 700 | chmod 700 ~/.ssh |
~/.ssh/authorized_keys | 600 | chmod 600 ~/.ssh/authorized_keys |
配置速查表
| 角色 | 核心任务 | 关键文件/命令 |
|---|---|---|
| 服务器 | 运行 SSH 服务 | sshd_config, authorized_keys |
| Windows 客户端 | 生成并推送公钥 | ssh-keygen, PowerShell 管道 |
| Linux 客户端 | 生成并推送公钥 | ssh-keygen, ssh-copy-id |