【Linux】SSH:免密登录
配置 SSH 的免密登录(基于公钥认证)可实现无需输入密码即可登录远程主机,常用于自动化脚本、服务器集群、DevOps 等场景。
生成本地 SSH 密钥对(若尚未存在)
在本地客户端执行:
ssh-keygen -t rsa -b 4096 -C "your_email@example.com"
- 默认生成:
- 私钥:
~/.ssh/id_rsa
- 公钥:
~/.ssh/id_rsa.pub
- 私钥:
- 一路回车即可,不建议设置 passphrase(否则仍需输入密码)
将公钥复制到远程主机
推荐方式:使用 ssh-copy-id
ssh-copy-id username@remote_host
- 例:
ssh-copy-id root@192.168.1.100
- 首次会提示输入远程主机密码,后续不再需要
替代方式:手动复制公钥
cat ~/.ssh/id_rsa.pub | ssh username@remote_host "mkdir -p ~/.ssh &&cat >> ~/.ssh/authorized_keys &&chmod 600 ~/.ssh/authorized_keys &&chmod 700 ~/.ssh
"
测试免密登录是否生效
ssh username@remote_host
- 若无提示输入密码,则表示配置成功 ✅
简化登录命令(可选)
在本地编辑:
vi ~/.ssh/config
添加:
Host myserverHostName 192.168.1.100User rootIdentityFile ~/.ssh/id_rsa
之后可直接使用:
ssh myserver
撤销免密登录
-
登录远程主机:
ssh username@remote_host
-
编辑远程的
authorized_keys
文件:vi ~/.ssh/authorized_keys
-
找到并删除对应的公钥(通过
your_email@example.com
或开头的 key 片段识别) -
保存并退出
启用或禁用 SSH 密码登录
1. 编辑远程主机的 SSH 配置文件:
sudo vi /etc/ssh/sshd_config
2. 常用配置项:
# 启用密码登录(默认):
PasswordAuthentication yes# 禁用密码登录(推荐用于已配置好公钥登录的场景):
# PasswordAuthentication no# 建议同时设置:
ChallengeResponseAuthentication no
UsePAM yes
3. 配置项含义对比表:
配置项 | 含义 | 与“密码登录”关系 |
---|---|---|
PasswordAuthentication | 是否允许传统用户名+密码登录 | ✅ 直接控制 |
ChallengeResponseAuthentication | 是否启用交互式认证(如 OTP、验证码) | ❌ 非传统密码登录 |
UsePAM | 是否启用 PAM 系统(辅助密码或多因子认证) | ⚠️ 有辅助作用 |
4. 重启 SSH 服务:
# Ubuntu / Debian:
sudo systemctl restart ssh# CentOS / RHEL:
sudo systemctl restart sshd