服务器管理和使用指南 - HIT-K1928-LAB/HIT-K1928-wiki GitHub Wiki

2026-08-30

只想知道怎么使用点此跳转

只想知道怎么管理点此跳转

为什么进行服务器管理?

改造前

  1. K1938无线网络覆盖差,信号弱,网速慢
  2. 无人机需要连接实验室局域网络测试,延迟大
  3. 远程控制K1938服务器延迟大
  4. 每台服务器只有一个账户,管理混乱,所有人的数据代码文件都放在一起
  5. 每台服务器同时间只允许一个人操作桌面环境

画板

改造后

  1. K1928与K1938实现有线桥接,两间屋子信号强覆盖,局域网链路不再因隔着走廊而有明显影响
  2. 每台服务器给每位同学分配个人账户,实现个人数据间的有效分隔
  3. 权限管理明确,分配实验室管理员账户拥有最高权限,密码只有少部分人知道
  4. 限制个人用户权限,包括不允许删除其他用户的数据资料、不允许对服务器造成毁灭性操作
  5. 由于有线桥接实现了K1928和K1938的高速数据通路,可以实现人在K1928,远程对所有服务器桌面环境、终端的访问
  6. 每台服务器理论上可以允许所有账户同时操作桌面环境

画板

图为2人同时使用远程桌面连接服务器,分别使用GPU0和GPU1训练

一、使用指南(使用服务器必看)

1 连接服务器

1.1 局域网内连接

命令行方式连接(轻量方式推荐)

服务器的账户名为各位同学的姓名小写全拼,初始密码也是姓名小写全拼,服务器IP地址列表见此链接 https://github.com/HIT-K1928-LAB/HIT-K1928-LAB-Password

  1. 连接服务器(需要在K1928/K1928-5G局域网内,网络密码buzhidao)
ssh your_name@server_IP

注:在下面章节vscode中添加好.ssh/config配置后,可以简化连接过程
如:Host k1928-c
    HostName 192.168.31.105
    User zhangrun
    Port 22
    IdentityFile ~/.ssh/id_ed25519

可以通过ssh k1928-c直接连接

第一次登录会提示修改密码,请第一次输入现有的默认密码,后面两次输入你的新密码

  1. 配置无密码连接(建议)
ssh-keygen -t ed25519
ssh-copy-id your_name@server_IP
# 这样下一次使用当前设备进行ssh连接将不会询问密码

VScode连接(正常开发推荐,本质仍是SSH连接)

  1. VScode(win/linux)安装如下插件,推荐一起把第二张图的插件也装了,为了后续的容器化开发准备

  1. 左侧任务栏找到远程资源管理器,进行连接

其中,点击设置、选择.ssh/config文件,可以进行自定义远程IP等项目的编辑,例如:

# Host k1928-c 表示此SSH命名为k1928-c,仅仅是可区分的名字
# HostName是连接的IP地址
# User是连接的用户名
# Port是SSH端口,局域网内为22,远程穿透情况下不是22
# IdentityFile ~/.ssh/id_ed25519是免密码连接的私钥

Host k1928-c
    HostName 192.168.31.105
    User zhangrun
    Port 22
    IdentityFile ~/.ssh/id_ed25519

  1. 连接成功

连接成功如下图所示,可以点击“打开文件夹”,选择自己的项目文件夹。

  1. vscode还支持连接进docker的容器内进行开发

前提:vscode已经通过远程ssh连接到服务器、或者远程桌面直接打开服务器内的vscode

打开远程资源管理器,切换到“开发容器”

可以看到服务器所有的container(可以理解为虚拟机环境),(后续从镜像创建容器时,容器命名希望大家在前面能够加上自己的名字以示区分)

可以点击在当前窗口中附加,即可连接到服务器的容器内环境

成功连接到容器中:

注:容器同时只能支持一个VScode窗口进行连接,不能像正常VScode一样多个窗口开不同的文件夹页面

桌面可视化连接

本机需要能够访问目标服务器,例如在 K1928/K1928-5G 局域网内,或通过学校 VPN / IPv6 能够访问服务器

windows可以使用windows自己的远程桌面连接软件进行连接,ubuntu可以使用remmina连接,计算机栏填写服务器的ipv4或者ipv6地址

使用如下用户名密码进行连接:

用户名:k1928

密码:buzhidao

选择自己的账户进行登录即可

当同一台电脑连接过不止一台服务器的桌面时,由于windows的凭据管理问题,会存在无法连接的问题,在windows的powershell中输入下面命令清除凭据即可

Stop-Process -Name mstsc -Force -ErrorAction SilentlyContinue

Remove-Item `
  "$env:USERPROFILE\Documents\Default.rdp" `
  -Force -ErrorAction SilentlyContinue

Remove-Item `
  "HKCU:\Software\Microsoft\Terminal Server Client\Servers" `
  -Recurse -Force -ErrorAction SilentlyContinue

1.2 非局域网内连接(校园网)

先到https://github.com/HIT-K1928-LAB/HIT-K1928-LAB-Password README.md 的 校园网内ipv6连接信息 里复制目标机器的 ipv6 地址。

ssh  用户名@IPv6地址

可视化连接见1.1部分,使用ipv6连接

1.3 非局域网内连接(校园外)

通过学校的vpn服务,可以在任意联网地点进行连接。

  1. https://ca.hit.edu.cn/wlap/VPNfw1.htm

在学校的vpn页面下载aTrust VPN客户端,并登录

  1. 远程桌面连接直接输入https://github.com/HIT-K1928-LAB/HIT-K1928-LAB-Password 记录的ipv6地址即可连接
  2. ssh服务需要加上-p 2222,即通过2222端口进行连接

终端命令行连接

如上图所示的,以k1928-c为例,ipv6为2406:280:1003:9617:e8ef:7ac2:ccd9:2f87

在终端命令行连接方法如下:

ssh -p 2222 your_name@[2406:280:1003:9617:e8ef:7ac2:ccd9:2f87]

远程桌面连接

登录vpn后,可视化连接见1.1部分,使用ipv6连接

vscode连接

和在局域网内使用vscode连接方法相似,局域网内vscode连接服务器

修改.ssh/config文件中的HostName和Port即可

Host k1928-c
    HostName 2406:280:1003:9617:e8ef:7ac2:ccd9:2f87
    User your_name
    Port 2222
    IdentityFile ~/.ssh/id_ed25519

2 挂载实验室网盘

2.1 windows

在我的电脑空白处,点击添加一个网络位置

实验室目前有两个存储设备,一个是k1928data01(8TB,使用超98%),k1928data02(8TB,新存储阵列,使用0%)

  1. 局域网内ipv4

文件夹位置输入

\192.168.31.10\k1928data01 挂载k1928data01

\192.168.31.10\k1928data02 挂载k1928data02

  1. 局域网内(VPN)ipv6

文件夹位置输入

**\2406-280-1003-d9b3--10.ipv6-literal.net\k1928data01 **挂载k1928data01

\2406-280-1003-d9b3--10.ipv6-literal.net\k1928data02 挂载k1928data02

注意ipv6地址可变,关注ipv6获取最新ipv6

用户名写guest,密码空置,即可连接,方便内部文件存储、文件传输

注:如果提示无法连接,一定是自身电脑配置问题,请使用chatgpt解决

2.2 ubuntu

实验室所有服务器均已经默认挂载网盘k1928data01和k1928data02,服务器无需重复挂载

位置在/mnt/k1928data01、/mnt/k1928data02

如果是自己的ubuntu设备需要进行挂载,可以使用如下命令

sudo mkdir /mnt/k1928data01

sudo mount -t cifs //192.168.31.10/k1928data01 /mnt/k1928data01 \ -o username=guest,password=,vers=3.0,iocharset=utf8,file_mode=0777,dir_mode=0777,noperm

3 使用技巧

3.1 使用统一构建的镜像docker环境,而不是在自己的用户空间中配置环境

docker在服务器上的特点是,镜像、容器大家都可以看得到

服务器内置了一套基础镜像base_image:ubt20-ros1-cda

该镜像包含ubuntu20.04、cuda11.4、ROS noetic、miniconda 25.11、gcc等编译环境

可以通过此镜像派生出各自的基础容器环境

由于docker大家都可以互相看到,所以大家的container命名时一定要使用自己的名字作为前缀

不推荐不使用此基础镜像,自己构建属于自己的镜像,因为会额外占用大量的服务器空间,大家使用同一个镜像的话,在自己容器上进行的改动只会以增量存储的形式占用,会大大节省存储资源。

使用容器镜像教程:

  1. 从镜像创建容器(image->container)
# ${CTN_NAME}需要替换成你想创建的容器的名字,建议前面加上名字以示区分,如:zhangrun_base_ctn
# -v /home/zhangrun/code:/root/code 这个是将宿主机的文件目录挂载到容器中,实现容器中能够访问到外面的代码或者数据文件夹
# ${IMAGE_NAME}为使用的镜像名字:Tag,如:ubuntu/cuda/ros/miniconda/gcc:20.04-11.4-noetic-25.11.1-8
docker run --entrypoint bash -it \
	--user root \
  --runtime=nvidia --gpus all \
  --shm-size=16g \
  -e "ACCEPT_EULA=Y" --privileged \
  --network=host \
  --ipc host \
  --name ${CTN_NAME} \
  -e "PRIVACY_CONSENT=Y" \
  -e DISPLAY=$DISPLAY \
	-e NVIDIA_VISIBLE_DEVICES=all \
  -e NVIDIA_DRIVER_CAPABILITIES=compute,utility,graphics,display \
  -e QT_X11_NO_MITSHM=1 \
  -v /tmp/.X11-unix:/tmp/.X11-unix:rw \
	-v /home/${USER}:/root/host_home \
  -v /home/${USER}/code:/root/code \
	-v /mnt/k1928data01:/mnt/k1928data01 \
	-v /mnt/k1928data02:/mnt/k1928data02 \
	${IMAGE_NAME}

# WSL 如果是使用wsl2中的docker Desktop使用下面命令创建容器
docker run --entrypoint bash -it \
  --gpus all \
  --shm-size=16g \
  -e "ACCEPT_EULA=Y" --privileged \
  --network=host \
  --device=/dev/dxg \
  --name yopo \
  -e "PRIVACY_CONSENT=Y" \
  -e DISPLAY=$DISPLAY \
  -e QT_X11_NO_MITSHM=1 \
  -v /tmp/.X11-unix:/tmp/.X11-unix \
  -e WAYLAND_DISPLAY=$WAYLAND_DISPLAY \
  -e XDG_RUNTIME_DIR=$XDG_RUNTIME_DIR \
  -e PULSE_SERVER=$PULSE_SERVER \
  -e LD_LIBRARY_PATH=/usr/lib/wsl/lib:/opt/ros/noetic/lib:/usr/local/nvidia/lib:/usr/local/nvidia/lib64 \
  -v /tmp/.X11-unix:/tmp/.X11-unix \
  -v /mnt/wslg:/mnt/wslg \
  -v /usr/lib/wsl:/usr/lib/wsl \
  -v /home/zhangrun/code:/root/code \
  yopo:latest
  1. 启动容器
# ${CONTAINER_NAME} 是你的容器的名字
docker start ${CONTAINER_NAME}
  1. 命令行进入容器
# ${CONTAINER_NAME} 是你的容器的名字
docker exec -it ${CONTAINER_NAME} bash
  1. 将docker内的窗口(如rviz、python的图片显示)转发到宿主机进行查看
# 宿主机上运行
echo $DISPLAY
#输出例如:14.0

# 容器中添加环境变量,可以使用临时方式(仅在此终端生效,重启后、退出终端、在其他终端失效),或者永久写入环境变量的方式
export DISPLAY=:14.0 (临时)
echo "export DISPLAY=:14.0" >> ~/.bashrc(永久)

# 宿主机运行
xhost +

# 容器中的窗口即可被转发出来

# 测试转发
conda activate base
apt install x11-apps -y
xclock

这个环境变量的值并不是一成不变的,变化的话可以通过修改~/.bashrc或者重新添加环境变量解决。

下图为在windows上通过vscode连接服务器的容器进行执行代码,将可视化窗口转发到远程桌面连接的虚拟屏幕上的效果

附:docker常见命令

docker常见命令
sudo apt-get update
sudo apt-get install -y apt-transport-https ca-certificates curl gnupg lsb-release
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg

echo
"deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg]
https://mirrors.tuna.tsinghua.edu.cn/docker-ce/linux/ubuntu
$(lsb_release -cs)
stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

sudo apt-get update sudo apt-get install -y docker-ce docker-ce-cli containerd.io

sudo groupadd docker #添加docker用户组 sudo gpasswd -a $USER docker #将登陆用户加入到docker用户组中 newgrp docker #更新用户组 docker ps #测试docker命令是否可以使用sudo正常使用


sudo mkdir -p /etc/docker

sudo tee /etc/docker/daemon.json <<-'EOF' { "registry-mirrors": [ "https://docker.m.daocloud.io", "https://dockerproxy.com", "https://docker.nju.edu.cn", "https://docker.mirrors.ustc.edu.cn" ] } EOF

sudo systemctl daemon-reload sudo systemctl restart docker

sudo mkdir -p /etc/systemd/system/docker.service.d
sudo nano /etc/systemd/system/docker.service.d/http-proxy.conf

#写入以下 [Service]

替换为你的本地代理端口(常见 7890/8888/10809)

Environment="HTTP_PROXY=http://127.0.0.1:7890" Environment="HTTPS_PROXY=http://127.0.0.1:7890" Environment="NO_PROXY=localhost,127.0.0.1,.docker.internal"

重启

sudo systemctl daemon-reload sudo systemctl restart docker


# 拉取镜像(默认 latest)
docker pull <镜像名>[:tag]

列出本地镜像

docker images

删除镜像

docker rmi <镜像ID/镜像名>

在当前目录根据 Dockerfile 构建镜像

docker build -t <镜像名>:<tag> .

导出镜像到文件

docker save -o <文件.tar> <镜像名>

从文件导入镜像

docker load -i <文件.tar>

导出容器为镜像

docker commit 容器ID或名字 新镜像名字:版本号

# 查看正在运行的容器
docker ps

查看所有容器(包括已退出的)

docker ps -a

新建并进入容器(交互模式)

docker run -it --name <容器名> <镜像名>

后台运行容器

docker run -d --name <容器名> <镜像名>

进入已运行的容器

docker exec -it <容器名/ID> bash

启动已停止的容器

docker start <容器名/ID>

停止容器

docker stop <容器名/ID>

重启容器

docker restart <容器名/ID>

删除容器

docker rm <容器名/ID>

实时查看容器日志

docker logs -f <容器名>

查看容器内运行的进程

docker top <容器名>

导出容器为镜像

docker commit 容器ID或名字 新镜像名字:版本号

# 列出所有数据卷
docker volume ls

创建数据卷

docker volume create <卷名>

查看卷的详细信息

docker volume inspect <卷名>

删除数据卷

docker volume rm <卷名>

挂载数据卷到容器

docker run -v <卷名>:<容器内路径> <镜像名>

# 查看所有网络
docker network ls

创建网络

docker network create <网络名>

查看网络详情

docker network inspect <网络名>

将容器连接到网络

docker network connect <网络名> <容器名>

将容器移出网络

docker network disconnect <网络名> <容器名>

# 查看 Docker 占用空间
docker system df

清理无用的容器、网络、镜像

docker system prune -f

删除无用镜像

docker image prune -a -f

删除已停止的容器

docker container prune -f

删除无用数据卷

docker volume prune -f


docker run --entrypoint bash -it 
--runtime=nvidia --gpus all
--shm-size=16g
-e "ACCEPT_EULA=Y" --privileged
--network=host
--name ${CTN_NAME}
-e "PRIVACY_CONSENT=Y"
-e DISPLAY=$DISPLAY
-e QT_X11_NO_MITSHM=1
-v /tmp/.X11-unix:/tmp/.X11-unix
-v /home/zhangrun/code:/root/code
${IMAGE_NAME}


从别的设备转移镜像

  1. 别的机型的image list
REPOSITORY            TAG                IMAGE ID       CREATED        SIZE
fastdronexi35         orin               a9e7d1623021   2 months ago   18.2GB
local/fastdronexi35   orin_base_35.3.1   17459a82b3fa   2 months ago   16.9GB
fastdronexi35         orin_base_35.3.1   17459a82b3fa   2 months ago   16.9GB

  1. 将他们打包成tar文件
sudo docker save -o ./fastdronexi35_orin.tar fastdronexi35:orin
sudo docker save -o ./fastdronexi35_orin_base.tar fastdronexi35:orin_base_35.3.1

  1. SCP发送到目标机器
scp fastdronexi35_orin.tar [email protected]:/home/user/

  1. 在目标机器加载镜像
docker load -i fastdronexi35_orin_base.tar
docker load -i fastdronexi35_orin.tar


docker pull osrf/ros:melodic-desktop-full-bionic

在宿主机上运行此命令,可以使docker中的窗口可视化 xhost +local:docker docker启动时加入参数 -e DISPLAY=$DISPLAY -v /tmp/.X11-unix:/tmp/.X11-unix

启动容器 docker run -it --name ros-melodic-dev --privileged=true --net=host -e DISPLAY=$DISPLAY -v /tmp/.X11-unix:/tmp/.X11-unix -v /home/zhangrun/code:/root/code osrf/ros:melodic-desktop-full-bionic /bin/bash -c "source /opt/ros/melodic/setup.bash && bash"


3.2 服务器代理设置

所有服务器均已经配置了本地代理服务,可以使用**http://127.0.0.1:7897进行代理配置****,注意端口号为7897**

cat >> ~/.bashrc << 'EOF'
export http_proxy="http://192.168.31.105:7897"
export https_proxy="http://192.168.31.105:7897"
export all_proxy="socks5://192.168.31.105:7897"
export HTTP_PROXY="$http_proxy"
export HTTPS_PROXY="$https_proxy"
export ALL_PROXY="$all_proxy"
EOF

source ~/.bashrc

# APT配置代理
sudo tee /etc/apt/apt.conf.d/95proxies > /dev/null <<'EOF'
Acquire::http::Proxy "http://192.168.31.105:7897/";
Acquire::https::Proxy "http://192.168.31.105:7897/";
EOF

# git 配置代理
git config --global http.proxy 192.168.31.105:7897
git config --global https.proxy 192.168.31.105:7897
export http_proxy="http://192.168.31.105:7897"
export https_proxy="http://192.168.31.105:7897"
export all_proxy="socks5://192.168.31.105:7897"
export HTTP_PROXY="$http_proxy"
export HTTPS_PROXY="$https_proxy"
export ALL_PROXY="$all_proxy"

3.3 windows的vscode或ssh直连容器(不推荐)

# 启动容器
docker start container_name

# 在容器内设置root密码
passwd root

# 安装ssh
apt-get install -y openssh-server xauth
cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak

# 更改默认的ssh端口,下面例子是2220,最好更换一下,不然大家会冲突
sed -i 's/^#\?Port .*/Port 2220/' /etc/ssh/sshd_config
# 如果文件里原来没有 Port 行,就追加一行
grep -q '^Port ' /etc/ssh/sshd_config || echo 'Port 2220' >> /etc/ssh/sshd_config

# 检查配置是否有效
sshd -t

# 重启 sshd
pkill sshd
# 每次重启容器都要重新运行这个命令
/usr/sbin/sshd 

# 设置允许ssh连接root账户
sudoedit /etc/ssh/sshd_config
# 修改下面两处
- PermitRootLogin yes
- PasswordAuthentication yes

# 连接
ssh -p 2220 root@宿主机IP
# 或者使用vscode连接

3.4 远程桌面配置成不休眠,远程桌面进行训练等操作,关闭远程后可以一直运行

3.5 使用完实体机后注销

在实体机上使用对应账户的桌面环境后,不要锁屏,而是点击注销当前账号

3.6 使用tmux实现关闭终端/vscode等,程序始终在跑

sudo apt-get install tmux

# 新建一个后台终端进程 xxx是这个进程的名字,建议以具体功能予以区分
tmux new -s xxx

# 在新进入的这个后台终端里进行训练程序的运行
# 然后将这个终端挂在后台detach(按住ctrl+b,再单独按d)

# 重新进入这个后台终端
tmux a -t xxx

3.7 docker里面终端显示中文为乱码

export LANG=C.UTF-8
export LC_ALL=C.UTF-8
export LESSCHARSET=utf-8

3.8 登录codeX

推荐在服务器容器中安装codex cli

# 添加 NodeSource 仓库
curl -fsSL https://deb.nodesource.com/setup_lts.x | sudo -E bash -
# 安装 Node.js
sudo apt-get install -y nodejs

# Ubuntu/Debian
sudo apt update && sudo apt install nodejs npm

# CentOS/RHEL/Fedora
sudo dnf install nodejs npm

node --version
npm --version

npm i -g @openai/codex --registry=https://registry.npmmirror.com

二、管理与运维指南(普通用户无需看下面部分)

服务器命名

服务器hostname格式统一为k1928-x,如k1928-c

sudo nano /etc/hostname
sudo nano /etc/hosts
sudo hostnamectl set-hostname 你的新名称

服务器添加用户

https://github.com/HIT-K1928-LAB/server-management

# 新建用户
sudo adduser username
# 删除用户及home目录
sudo deluser --remove-home username

权限管理

# 新建用户组
groupadd labusers 
# 新建管理员组
groupadd labadmin

# 添加用户到用户组
usermod -aG labusers name
usermod -aG docker name # docker组,所有人都要进

# 添加用户到管理员组
usermod -aG sudo name

# 同一个人不可以同时进入管理员组和用户组

# 从某个组删除用户
gpasswd -d zhangrun labusers

# 配置各个用户组权限
visudo

# 添加以下
# 实验室普通用户最终权限(禁止切root,仅开放必需功能)
%labusers  ALL=(ALL) NOPASSWD: /usr/bin/apt, /usr/bin/apt-get, /usr/bin/dpkg, /usr/bin/systemctl, /usr/bin/chmod, /usr/bin/chown, /usr/bin/ping, /usr/bin/ifconfig, /usr/bin/mv, !/bin/bash, !/bin/sh, !/usr/bin/sudo -i

更改root密码

# 给 root 用户设置密码(执行后输入两次密码)
sudo passwd root

# 切换到 root 用户(验证)
su - root

添加用户到docker用户组

usermod -aG docker 用户名

允许root通过ssh登录

sudoedit /etc/ssh/sshd_config

PermitRootLogin yes
PasswordAuthentication yes

sudo sshd -t
sudo systemctl restart ssh
sudo systemctl restart sshd

创建账号(可以使用自动化脚本https://github.com/HIT-K1928-LAB/server-management)

sudo useradd -m -s /bin/bash zhangrun
sudo usermod -aG sudo zhangrun
sudo passwd zhangrun
sudo chage -d 0 zhangrun # 强制用户下次登录时立即改密码

服务器配置远程桌面xrdp

sudo apt update
sudo apt install -y xrdp
sudo systemctl enable --now xrdp
sudo adduser xrdp ssl-cert
sudo systemctl restart xrdp
sudo ufw allow 3389/tcp

固定挂载内网数据盘并配置权限

sudo mkdir -p /mnt/k1928data01
sudo mkdir -p /mnt/k1928data02

# 测试挂载
sudo mount -t cifs //192.168.31.95/k1928data01 /mnt/k1928data01 \
  -o username=guest,password=,vers=3.0,iocharset=utf8,file_mode=0777,dir_mode=0777,noperm

# 正式挂载
sudo nano /etc/fstab

//192.168.31.95/k1928data01 /mnt/k1928data01 cifs username=guest,password=,vers=3.0,iocharset=utf8,file_mode=0777,dir_mode=0777,noperm,_netdev,nofail,x-systemd.automount 0 0
//192.168.31.95/k1928data02 /mnt/k1928data02 cifs username=guest,password=,vers=3.0,iocharset=utf8,file_mode=0777,dir_mode=0777,noperm,_netdev,nofail,x-systemd.automount 0 0

sudo mount -a

服务器配置代理

sudo mkdir -p /etc/mihomo
sudo mkdir -p /etc/mihomo/ui
sudo mkdir -p /var/log/mihomo

下载"/home/zhangrun/Downloads/mihomo-linux-amd64-v1.19.24.deb"
sudo apt install ./Downloads/mihomo-linux-amd64-v1.19.24.deb

mihomo -v

sudo curl -L "<YOUR_SUB_URL>" -o /etc/mihomo/config.yaml

# 开机自启动
sudo systemctl enable mihomo
sudo systemctl is-enabled mihomo

# 现在已经可以使用代理了
# 接下来配置远程UI

# https://github.com/MetaCubeX/metacubexd/releases 下载压缩包解压到/etc/mihomo/ui
 grep -E '^(mixed-port|port|socks-port|allow-lan|bind-address|external-controller|external-ui|secret):' /etc/mihomo/config.yaml

port: 7897
socks-port: 7891
allow-lan: false
external-controller: '0.0.0.0:9090'
secret: ''

# /etc/mihomo/config.yaml添加这个:external-ui: /etc/mihomo/ui
sudo systemctl restart mihomo

可以通过局域网访问IP:9090/ui来进行可视化配置

服务器上的各个软件配置代理

sudo tee /etc/profile.d/proxy.sh >/dev/null <<'EOF'
# Global proxy for all users

export http_proxy="http://127.0.0.1:7897"
export https_proxy="http://127.0.0.1:7897"
export HTTP_PROXY="http://127.0.0.1:7897"
export HTTPS_PROXY="http://127.0.0.1:7897"

# 如果 mihomo 使用 mixed-port,socks5h 一般也可用
export all_proxy="socks5h://127.0.0.1:7897"
export ALL_PROXY="socks5h://127.0.0.1:7897"

export no_proxy="localhost,127.0.0.1,::1,0.0.0.0,192.168.0.0/16,10.0.0.0/8,172.16.0.0/12"
export NO_PROXY="$no_proxy"
EOF

sudo chmod 644 /etc/profile.d/proxy.sh
source /etc/profile.d/proxy.sh

# 测试
echo $http_proxy
curl -I https://www.google.com
sudo tee -a /etc/environment >/dev/null <<'EOF'

http_proxy=http://127.0.0.1:7897
https_proxy=http://127.0.0.1:7897
HTTP_PROXY=http://127.0.0.1:7897
HTTPS_PROXY=http://127.0.0.1:7897
all_proxy=socks5h://127.0.0.1:7897
ALL_PROXY=socks5h://127.0.0.1:7897
no_proxy=localhost,127.0.0.1,::1,0.0.0.0,192.168.0.0/16,10.0.0.0/8,172.16.0.0/12
NO_PROXY=localhost,127.0.0.1,::1,0.0.0.0,192.168.0.0/16,10.0.0.0/8,172.16.0.0/12
EOF
sudo tee /etc/apt/apt.conf.d/95proxies >/dev/null <<'EOF'
Acquire::http::Proxy "http://127.0.0.1:7897";
Acquire::https::Proxy "http://127.0.0.1:7897";
EOF
sudo git config --system http.proxy http://127.0.0.1:7897
sudo git config --system https.proxy http://127.0.0.1:7897
sudo mkdir -p /etc/systemd/system/docker.service.d
sudo tee /etc/systemd/system/docker.service.d/http-proxy.conf >/dev/null <<'EOF'
[Service]
Environment="HTTP_PROXY=http://127.0.0.1:7897"
Environment="HTTPS_PROXY=http://127.0.0.1:7897"
Environment="NO_PROXY=localhost,127.0.0.1,::1,192.168.0.0/16,10.0.0.0/8,172.16.0.0/12"
EOF

sudo systemctl daemon-reload
sudo systemctl restart docker

服务器ssh配置

# ssh允许root登录
# ssh允许2222端口

sudoedit /etc/ssh/sshd_config

PermitRootLogin yes
PasswordAuthentication yes
Port 22
Port 2222

sudo sshd -t
sudo systemctl restart ssh
sudo systemctl restart sshd
⚠️ **GitHub.com Fallback** ⚠️