重装Ubuntu回退至16.04并保留SSH密钥以维持远程登录
如何在重装Ubuntu 16.04后保留远程机器的SSH密钥登录
别担心,只要提前做好备份和后续的正确配置,那些无法物理访问的远程机器完全可以继续自动登录你的VPS。下面是一步步的实操指南:
1. 先备份当前服务器的授权密钥文件
在你目前的Ubuntu 17.04系统上,首先要把存储所有允许登录公钥的核心文件备份好——这个文件是~/.ssh/authorized_keys(对应普通用户),如果是root用户则是/root/.ssh/authorized_keys。
你可以用两种方式备份:
- 下载到本地电脑(最稳妥):
# 备份普通用户的密钥文件到本地 scp ~/.ssh/authorized_keys your-local-username@your-local-ip:/your/local/save/path/ # 如果是root用户,执行这个 scp /root/.ssh/authorized_keys your-local-username@your-local-ip:/your/local/save/path/
- 复制内容到本地文本:直接查看文件内容,把所有公钥复制粘贴到本地的记事本里保存:
cat ~/.ssh/authorized_keys
2. 重装Ubuntu 16.04系统
重装时注意两个细节:
- 如果你的VPS控制面板支持自定义SSH密钥安装,可以直接把备份的公钥内容填入对应字段,这样系统装好后会自动配置好密钥登录。
- 如果没有这个选项,就正常安装系统,记住装完后第一时间安装SSH服务。
3. 恢复授权密钥并设置正确权限
重装完成后,先通过VPS控制台或临时密码登录新系统,然后按以下步骤操作:
3.1 安装SSH服务(如果没预装的话)
sudo apt update && sudo apt install openssh-server -y
3.2 恢复authorized_keys文件
把之前备份的文件上传到新系统的对应用户目录:
# 恢复到普通用户(比如ubuntu用户) scp /your/local/save/path/authorized_keys ubuntu@your-vps-ip:~/.ssh/ # 恢复到root用户 scp /your/local/save/path/authorized_keys root@your-vps-ip:/root/.ssh/
如果没法用scp,也可以手动创建目录并粘贴内容:
mkdir -p ~/.ssh nano ~/.ssh/authorized_keys # 把备份的所有公钥内容粘贴进去,按Ctrl+O保存,Ctrl+X退出
3.3 设置严格的权限(这一步绝对不能省!)
SSH对密钥文件和目录的权限要求非常严格,权限错误会直接导致密钥登录失败。执行以下命令设置正确权限:
# 设置.ssh目录权限为700(仅所有者可读写执行) chmod 700 ~/.ssh # 设置authorized_keys文件权限为600(仅所有者可读写) chmod 600 ~/.ssh/authorized_keys # 如果是root用户,还要确保所有者正确 chown root:root /root/.ssh/authorized_keys chown root:root /root/.ssh
4. 验证SSH配置
检查SSH服务的配置文件,确保公钥认证功能开启:
sudo nano /etc/ssh/sshd_config
找到并确认以下配置项:
PubkeyAuthentication yes(开启公钥认证)AuthorizedKeysFile .ssh/authorized_keys(指定授权密钥文件路径)- 如果之前禁用了密码登录,确保
PasswordAuthentication no(可选,根据你的安全需求)
修改后重启SSH服务生效:
sudo systemctl restart ssh
5. 测试远程机器登录
现在可以让远程机器尝试自动登录,或者你用其中一台远程机器的私钥手动测试:
ssh -i /path/to/remote-machine-private-key username@your-vps-ip
如果能成功登录,说明配置完全没问题。
额外提醒:如果远程机器用的是特定用户登录(比如deploy用户),一定要在新系统里先创建这个用户,再给该用户恢复对应的授权密钥文件。
内容的提问来源于stack exchange,提问作者user3735849




