SSH 自动登录配置:免密码连接服务器的完整步骤
SSH 自动登录通过密钥认证实现,无需每次输入密码即可连接服务器,尤其适合频繁远程操作的场景。以下是详细的配置步骤和注意事项。
在客户端生成密钥对
首先在本地客户端(如你的电脑)生成 SSH 密钥对(公钥和私钥),过程如下:
生成密钥对
使用 ssh-keygen 命令生成,支持 RSA、DSA、ED25519 等算法(推荐 RSA 或 ED25519):
1 | # 生成 RSA 算法的密钥对(默认路径 ~/.ssh/) |
-t rsa:指定加密算法为 RSA(安全性高,兼容性好)。-b 4096:密钥长度 4096 位(比默认的 2048 位更安全)。-f ~/.ssh/my_ssh_key:指定密钥文件路径和名称(避免与默认密钥冲突)。
密钥生成过程
执行命令后会出现交互提示:
1 | Generating public/private rsa key pair. |
生成后,在 ~/.ssh/ 目录下会产生两个文件:
my_ssh_key:私钥(重要!不可泄露,仅保存在本地)。my_ssh_key.pub:公钥(需要上传到服务器)。
将公钥上传到服务器
手动上传公钥(通用方法)
步骤 1:登录服务器
先用密码登录到目标服务器(假设服务器 IP 为 192.168.1.100,用户名为 admin):
1 | ssh admin@192.168.1.100 |
步骤 2:创建 .ssh 目录(若不存在)
服务器上的用户主目录下需要有 .ssh 目录,且权限必须正确:
1 | mkdir -p ~/.ssh # 创建目录(-p 确保父目录存在) |
步骤 3:上传公钥内容
回到本地客户端,复制公钥内容:
1 | cat ~/.ssh/my_ssh_key.pub |
将输出的公钥字符串(类似 ssh-rsa AAAAB3NzaC1yc2EAAA...)复制到剪贴板。
步骤 4:写入服务器的 authorized_keys
在服务器上,将公钥内容追加到 ~/.ssh/authorized_keys 文件:
1 | nano ~/.ssh/authorized_keys # 打开文件,粘贴公钥内容,保存退出 |
自动上传公钥(简化方法)
如果客户端安装了 ssh-copy-id 工具(Linux/macOS 通常自带),可一键上传:
1 | ssh-copy-id -i ~/.ssh/my_ssh_key.pub admin@192.168.1.100 |
-i:指定公钥文件路径。- 执行后输入服务器用户的密码,公钥会自动添加到
authorized_keys并设置正确权限。
测试自动登录
配置完成后,尝试从客户端连接服务器,无需输入密码即可登录:
1 | ssh -i ~/.ssh/my_ssh_key admin@192.168.1.100 |
-i:指定私钥文件(若使用默认密钥id_rsa,可省略该参数)。
进一步简化:配置 SSH 别名
为避免每次输入服务器 IP、用户名和密钥路径,可通过 ~/.ssh/config 文件定义登录别名:
创建 / 编辑配置文件
1 | nano ~/.ssh/config |
添加服务器配置
1 | # 定义一个名为 "myserver" 的别名 |
使用别名登录
保存后,直接通过别名连接:
1 | ssh myserver # 一键登录,无需任何额外参数 |
增强安全性(可选)
禁用服务器密码登录
为防止暴力破解,配置完成后可在服务器上禁用密码登录,仅允许密钥认证:1
2# 登录服务器后编辑 SSH 配置
sudo nano /etc/ssh/sshd_config修改以下参数:
1
2PasswordAuthentication no # 禁用密码登录
PubkeyAuthentication yes # 启用公钥认证(默认已开启)重启 SSH 服务生效:
1
sudo systemctl restart sshd # Ubuntu/Debian/CentOS 通用
设置密钥密码(passphrase)
若担心私钥泄露,生成密钥时可设置密码(passphrase),结合ssh-agent缓存密码,兼顾安全性和便捷性:1
2
3
4
5# 启动 ssh-agent 进程
eval $(ssh-agent -s)
# 将私钥添加到缓存(仅首次需要输入 passphrase)
ssh-add ~/.ssh/my_ssh_key
v1.3.10