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