一、在客户端生成 SSH 密钥对#
在你的本地客户端(例如你的笔记本或开发机器)上:
ssh-keygen -t rsa -b 4096 -C "[email protected]"说明:
-t rsa:生成 RSA 类型的密钥;-b 4096:密钥长度,建议至少 4096;-C:注释,通常填邮箱方便识别。
系统会提示你保存文件位置,默认是:
~/.ssh/id_rsa (私钥)
~/.ssh/id_rsa.pub (公钥)也可以自定义文件名,方便区分不同用途。
二、将公钥复制到服务器#
假设你的服务器 IP 是 192.168.1.108,用户名是 ice345:
方法一(推荐)使用 ssh-copy-id 自动复制:#
这个通常都会无法成功 copy 到服务器上
ssh-copy-id -i ~/.ssh/id_rsa.pub [email protected]系统会提示输入服务器密码,输入一次即可自动把公钥复制到服务器的 ~/.ssh/authorized_keys 里,并设置好权限。
方法二:手动复制#
如果没有 ssh-copy-id:
- 查看公钥内容:
cat ~/.ssh/id_rsa.pub- 登录服务器(使用密码):
- 在服务器上创建
~/.ssh/目录(如果还没有):
mkdir -p ~/.ssh
chmod 700 ~/.ssh- 编辑
authorized_keys文件:
nano ~/.ssh/authorized_keys将你刚才 cat 出来的公钥粘贴进去,保存。
- 修改权限:
chmod 600 ~/.ssh/authorized_keys三、测试免密登录#
回到客户端,执行:
如果一切顺利,不需要输入密码就能登录。
四、服务器配置 SSH 服务#
在服务器上编辑 sshd 配置文件:
sudo nano /etc/ssh/sshd_config重点配置项:
# 允许公钥认证(默认通常是yes)
PubkeyAuthentication yes
# 允许密码登录(如不想允许可以关闭)
PasswordAuthentication yes # 或 no
# 允许使用 authorized_keys 文件
AuthorizedKeysFile .ssh/authorized_keys
# 禁止 root 直接登录(安全建议)
PermitRootLogin no修改后,重启 ssh 服务:
sudo systemctl restart sshd五、额外注意事项#
- 如果你希望完全关闭密码登录,保证只允许密钥登录,可以把
PasswordAuthentication改为no。 - 确认目录权限正确:
| 目录/文件 | 权限 |
|---|---|
| ~/.ssh/ | 700 |
| ~/.ssh/authorized_keys | 600 |
- 防火墙确认开放
22端口。
六、完整快速版流程总结#
# 1. 客户端生成密钥
ssh-keygen -t rsa -b 4096
# 2. 复制公钥到服务器
ssh-copy-id -i ~/.ssh/id_rsa.pub user@server_ip
# 3. 测试免密登录
ssh user@server_ip
# 4. 修改服务器 /etc/ssh/sshd_config(可选)
sudo nano /etc/ssh/sshd_config
# 确认或修改:
PubkeyAuthentication yes
PasswordAuthentication yes (或 no)
# 5. 重启 SSH 服务
sudo systemctl restart sshd
