Scaleway救援模式救机过程

本文最后更新于 11 个月前,文中所描述的信息可能已发生改变。

2023-12-23 Updated: Scaleway低价纯ipv6的服务器质量越来越差,现在已经到了稍微跑一两个服务,速度稍微一快就自动关机的地步,目前已删机,一分价钱一分货,现实中也是如此。

Scaleway的巴黎低价纯ipv6服务器也开通了将近一年了,其中乱七八糟的脚本用了一堆,除了用来挂探针也搭了一些杂七杂八的小服务。大概一个月前发现探针中的服务器突然灰了,但是当时并没有在意,以为是全局WARP导致的失联,一直没管。这两天尝试修复了一下,ssh连接不上,服务全寄了,cloudflare tunnel也显示离线,只有scaleway的面板上状态显示和账单邮件一切正常,首先尝试用面板中的VNC连接,但一直黑屏(后面才知道scaleway家的vnc就是这样,黑屏就一直等着过段时间敲两个字,有显示了就可以登陆了)上网搜了一些救援教程也没什么有用的,深挖互联网过了许久终于找到一两篇hostloc的救援模式改硬盘教程,根据教程成功DD了系统:

【长文警告!】【教程】DD 官网 Debian 11云镜像到小鸡-美国VPS综合讨论-全球主机交流论坛 - Powered by Discuz!

Scaleway IPv6 VPS 缩小硬盘到3G,实现 0.2欧/月-美国VPS综合讨论-全球主机交流论坛 - Powered by Discuz!

作者都写的十分详细,非常佩服这些大佬创造出如此有价值的文章。

进入救援模式

The rescue image boots a minimal Ubuntu system in the RAM and configures the network of the Instance. It will not mount any of your attached volumes. You can mount your volumes manually to carry out debugging of the system

据官方的解释:救援模式是一个运行在RAM中的系统,可以用来在网络配置错误无法连接的时候连接使用。

首先在instance右上角关机,然后在Advanced面板更改启动方式为Use rescue image 后启动,等待1-2分钟(官方文档)后尝试连接,我感觉实际上等了至少3分钟才能连接ssh,这时连接ssh只能用密钥连接,可以提前在后台ssh key中添加公钥 (我后面添加的新的公钥还是无法使用,只能用很久之前添加的公钥,如果不在本机可以导出来通过ssh选项-i +私钥文件连接)

DD新系统

首先说一声dd之前应该是可以获得本机的数据的,但是我看的文章作者放在了最后,导致我刚开始没看见也没尝试过。。。(以下命令将存储挂载到/mnt目录)

bash
mount /dev/vda1 /mnt

后面就正式开始了

bash
lsblk

首先查看默认磁盘,大部分都是/dev/vda,也有些人不是,然后直接下载系统镜像(以下命令二选一,区别是一个是压缩包,对网络要求低,一个是原始镜像,文件较大下载时间比较长):

bash
# Debian 12:
curl -Lo- "https://cloud.debian.org/images/cloud/bookworm/latest/debian-12-genericcloud-amd64.raw" | dd of=/dev/vda bs=1M
curl -Lo- "https://cloud.debian.org/images/cloud/bookworm/latest/debian-12-genericcloud-amd64.tar.xz" | tar -xJO | dd of=/dev/vda bs=1M

# Debian 11:
curl -Lo- "https://cloud.debian.org/images/cloud/bullseye/latest/debian-11-genericcloud-amd64.raw" | dd of=/dev/vda bs=1M
curl -Lo- "https://cloud.debian.org/images/cloud/bullseye/latest/debian-11-genericcloud-amd64.tar.xz" | tar -xJO | dd of=/dev/vda bs=1M

DD完之后修复硬盘、重读分区并扩容

bash
parted -l

此命令用于修复磁盘,刚开始修复的磁盘是/dev/sda,这时候选fix也是修复不了的,只能ignored,在第二个提示修复/dev/vda的时候选fix

bash
# 告诉系统更新分区表
partprobe
# 扩容 Debian 11系统分区到最大
parted -s /dev/vda resizepart 1 100%
# 扩容 Debian 11系统分区的文件系统到最大
e2fsck -f /dev/vda1
resize2fs /dev/vda1

修改密码,ssh密钥

将磁盘目录挂载到/mnt下

bash
mount /dev/vda1 /mnt
# 查看是否挂载成功,应该会多出来一个10g的文件系统
df -h 
# 生成密码
openssl passwd -1 hostloc.com

生成后的密码应该类似于$1$DiGZGr2m$Ht8S5tfK9oXxLwp6LjPUT0 一样,但是不能复制这个要手动生成,并且每次相同的密码生成出的内容应该是不同的

bash
# 更改密码,修改加粗的部分为自己生成的内容
sed -i 's/root:\*/root:**$1$DiGZGr2m$Ht8S5tfK9oXxLwp6LjPUT0**/g' /mnt/etc/shadow

添加 ssh登录公钥(汉字部分换成你的公钥)

bash
rm -rf /mnt/root/.ssh/
mkdir /mnt/root/.ssh/

echo "你的ssh公钥" > /mnt/root/.ssh/authorized_keys

chmod 700 /mnt/root/.ssh/
chmod 600 /mnt/root/.ssh/authorized_keys

# 只允许 root以密钥方式登录 ssh
sed -i 's/#PermitRootLogin/PermitRootLogin/g' /mnt/etc/ssh/sshd_config

在开机脚本添加 ssh主机密钥,非常重要!(开机连上 ssh之后就可以删除了,首次需要而已。)

bash
cat <<EOF> /mnt/etc/rc.local
#!/bin/bash
/usr/bin/ssh-keygen -A
systemctl restart ssh
EOF

给开机脚本添加执行权限 否则无法运行

bash
chmod +x /mnt/etc/rc.local

禁用 cloud-init这就是母鸡给小鸡下发配置的后门

bash
touch /mnt/etc/cloud/cloud-init.disabled

IP地址设置 自定义 azure(可选 红色部分改成实际的IP地址和网关)

bash
cat <<EOF>> /mnt/etc/network/interfaces
# eth0
auto eth0
iface eth0 inet static
    address 10.0.0.4/24
    gateway 10.0.0.1
iface eth0 inet6 static
    address 2001:10::4/64
    gateway fe80::1234:5678:9abc
EOF

设置 DNS 并禁止覆盖(可选 必选,不然以后DNS老是自动还原为空无法联网)

bash
rm -f /mnt/etc/resolv.conf
cat <<EOF> /mnt/etc/resolv.conf
#nameserver 1.1.1.1
#nameserver 1.0.0.1
nameserver 2606:4700:4700::1111
nameserver 2606:4700:4700::1001
EOF
chattr +i /mnt/etc/resolv.conf

进入scaleway后台power off,进入advanced更改启动方式后通过ssh连接

主要内容结束,后面是附加内容

附加内容

安装WARP

通过fscarmen/warp的仓库安装warp-go:

bash
wget -N https://gitlab.com/fscarmen/warp/-/raw/main/warp-go.sh && bash warp-go.sh

默认会使用脚本自带的teams账号,也可以自己更改为自己的账号

开启系统自带BBR

bash
echo "net.core.default_qdisc=fq" >> /etc/sysctl.conf
echo "net.ipv4.tcp_congestion_control=bbr" >> /etc/sysctl.confs
#开启
sysctl -p
# 验证
sysctl net.ipv4.tcp_available_congestion_control

SSH相关配置

bash
#修改密码
passwd
#修改sshd_config配置文件
vim /etc/ssh/sshd_config
#找到以下选项把#去掉改成yes保存
PermitRootLogin yes
PubkeyAuthentication yes
PasswordAuthentication yes
#重启sshd
service sshd restart

Reference

本篇内容大部分来自于以下文章,感谢作者

CS2: 本地自建跑图服务器
Emby:使用Overlayfs优化云盘视频海报/视频列表加载速度