如何制作支持SSH远程连接的Ubuntu救援USB,以异地修复无法启动的主机?
如何制作支持SSH远程连接的Ubuntu救援USB,以异地修复无法启动的主机?
这种异地救砖的情况确实挺棘手的,不过你的思路完全找对了方向!我来给你一套可落地的步骤,帮你远程搞定这台Ubuntu主机:
一、选对基础镜像:用Ubuntu Server Live镜像更省心
别用传统的救援CD了,直接用Ubuntu Server的最新LTS Live镜像(比如22.04)——它默认自带SSH服务,还支持cloud-init工具,能帮我们预先注入SSH密钥和配置,完全不用手动修改系统文件。
二、制作带自动SSH配置的救援U盘
我们用cloud-init来实现开机即开启SSH+自动导入你的公钥,步骤如下:
准备U盘:找一个至少8G的U盘,先格式化(注意备份数据)。我们需要给它分两个分区:
- 第一个分区:写入Ubuntu Server Live镜像(用
dd工具或者Etcher这类可视化工具都可以) - 第二个分区:格式化为FAT32,命名为
cidata(这个名字是硬性要求,cloud-init会自动识别)
- 第一个分区:写入Ubuntu Server Live镜像(用
创建cloud-init配置文件:在
cidata分区里新建两个文件:- user-data(核心配置,复制下面内容并替换你的公钥):
#cloud-config users: - name: rescueadmin ssh_authorized_keys: - ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQ... 这里替换成你本地机器的~/.ssh/id_rsa.pub内容 sudo: ['ALL=(ALL) NOPASSWD:ALL'] groups: sudo shell: /bin/bash ssh_pwauth: false # 禁用密码登录,只允许密钥登录更安全 disable_root: false network: version: 2 ethernets: all: dhcp4: true # 自动获取IP,适合大多数家庭网络 - meta-data(可以是空文件,或者填点标识信息):
instance-id: rescue-001 local-hostname: rescue-box
- user-data(核心配置,复制下面内容并替换你的公钥):
验证配置:确保两个文件没有拼写错误,尤其是
cidata分区的名字和user-data里的公钥格式。
三、指导你的朋友操作
- 让他把做好的U盘插到故障主机上,开机后按对应按键(一般是F12、F2或Del)进入BIOS,选择从U盘启动。
- 主机启动后,cloud-init会自动完成配置:创建用户、导入你的公钥、启动SSH服务——这个过程大概需要1-2分钟,不用他做任何操作。
- 让他登录家里的路由器后台,找到这台主机的内网IP(可以看DHCP客户端列表),然后做端口转发:把路由器的某个公网端口(比如2222)转发到主机的22端口。
- 最后让他告诉你路由器的公网IP和转发的端口,你就可以用SSH连接了:
ssh rescueadmin@朋友的公网IP -p 2222
四、额外小贴士
- 如果主机所在的网络没有DHCP,你可以在
user-data里配置静态IP,替换掉上面的network部分即可。 - 连接后你可以用
fsck检查磁盘、挂载系统分区修复启动项,或者做任何控制台能完成的救援操作。 - 用完记得让朋友关掉端口转发,避免安全风险。
备注:内容来源于stack exchange,提问作者Justin Finkelstein
相关产品推荐
相关产品推荐

