SSH 密钥配置实现一键登录服务器
前言
在日常开发中,我们经常需要登录远程服务器进行部署、调试等操作。传统的密码登录方式存在以下问题:
- 安全性较低:密码可能被暴力破解
- 操作繁琐:每次登录都需要输入密码
- 效率低下:频繁登录时重复输入密码浪费时间
通过配置 SSH 密钥认证,可以实现:
- 更高的安全性:使用非对称加密,比密码更安全
- 一键登录:配置完成后无需输入密码即可登录
- 提升效率:简化登录流程,提高工作效率
配置步骤
1. 检查本地是否已有 SSH 密钥
首先检查本地是否已经存在 SSH 密钥对:
bash
ls -al ~/.ssh如果看到 id_rsa 和 id_rsa.pub(或 id_ed25519 和 id_ed25519.pub),说明已经存在密钥对,可以跳过第2步,直接进入第3步。
2. 生成 SSH 密钥对
如果本地没有 SSH 密钥,需要先生成一个。推荐使用 ed25519 算法(更安全、更快):
bash
ssh-keygen -t ed25519 -C "your_email@example.com"或者使用传统的 RSA 算法(兼容性更好):
bash
ssh-keygen -t rsa -b 4096 -C "your_email@example.com"执行命令后会提示:
- Enter file in which to save the key:直接按回车,使用默认路径
~/.ssh/id_ed25519 - Enter passphrase:可以设置密码短语(可选,直接回车表示不设置)
密钥生成成功后,会在 ~/.ssh/ 目录下生成两个文件:
id_ed25519:私钥(绝对不能泄露,保存在本地)id_ed25519.pub:公钥(可以安全地复制到服务器)
3. 将公钥复制到服务器
有多种方法可以将公钥复制到服务器,推荐使用 ssh-copy-id 命令(最简单):
bash
ssh-copy-id -i ~/.ssh/id_ed25519.pub user@host其中:
user:服务器的用户名host:服务器的 IP 地址或域名
如果 ssh-copy-id 命令不可用,可以手动复制:
bash
# 1. 查看公钥内容
cat ~/.ssh/id_ed25519.pub
# 2. 复制输出的内容,然后登录服务器
ssh user@host
# 3. 在服务器上执行以下命令(如果目录不存在则先创建)
mkdir -p ~/.ssh
chmod 700 ~/.ssh
# 4. 将公钥内容追加到 authorized_keys 文件
echo "你的公钥内容" >> ~/.ssh/authorized_keys
chmod 600 ~/.ssh/authorized_keys4. 配置 SSH config 文件(可选但推荐)
为了更方便地登录服务器,可以配置 SSH 的 config 文件,实现自定义别名和参数。
编辑或创建 ~/.ssh/config 文件:
bash
vim ~/.ssh/config添加以下配置:
bash
Host server1
HostName 192.168.1.100
User root
Port 22
IdentityFile ~/.ssh/id_ed25519
ServerAliveInterval 60
ServerAliveCountMax 3
Host server2
HostName example.com
User deploy
Port 2222
IdentityFile ~/.ssh/id_ed25519配置说明:
Host:自定义的别名,可以随意命名HostName:服务器的 IP 地址或域名User:登录用户名Port:SSH 端口(默认 22,如果服务器修改了端口需要指定)IdentityFile:指定使用的私钥路径ServerAliveInterval:每 60 秒发送一次心跳包,保持连接ServerAliveCountMax:最多发送 3 次心跳包,如果都失败则断开连接
5. 测试一键登录
配置完成后,就可以使用以下方式登录:
方式一:使用配置的别名(推荐)
bash
ssh server1方式二:直接使用 IP 或域名
bash
ssh user@host如果配置正确,应该可以直接登录,无需输入密码。
常见问题
1. 权限问题
如果遇到权限错误,检查以下文件的权限:
bash
# 本地私钥权限应该是 600
chmod 600 ~/.ssh/id_ed25519
# 本地 config 文件权限应该是 644
chmod 644 ~/.ssh/config
# 服务器上的 authorized_keys 权限应该是 600
chmod 600 ~/.ssh/authorized_keys
# 服务器上的 .ssh 目录权限应该是 700
chmod 700 ~/.ssh2. 多个密钥对
如果有多台服务器使用不同的密钥,可以在 config 文件中为每个服务器指定不同的密钥:
bash
Host server1
HostName 192.168.1.100
User root
IdentityFile ~/.ssh/id_ed25519_server1
Host server2
HostName 192.168.1.200
User deploy
IdentityFile ~/.ssh/id_ed25519_server23. 测试连接
如果登录失败,可以使用详细模式查看错误信息:
bash
ssh -v server1-v 参数会显示详细的连接过程,有助于排查问题。
总结
通过配置 SSH 密钥认证,我们可以:
- ✅ 提高服务器访问的安全性
- ✅ 实现一键登录,无需每次输入密码
- ✅ 通过 SSH config 文件管理多台服务器
- ✅ 提升日常开发和运维效率
配置完成后,登录服务器就像访问本地目录一样简单!