从安全性考虑服务器的root账号用于SSH代理,是非常不合适的,所以我们会创建一个专门用于代理转发用的账号 关键字:代理,VPN,SSH
Debian服务器
因为Debian比较轻,甚至有一些免费的服务器可以白嫖,比如这篇文章 白嫖海外服务器
一、前提条件
- 已安装 SSH 服务(Debian 12 默认可能未预装,需先安装):
sudo apt update && sudo apt install openssh-server -y
- 拥有
root
权限或可使用sudo
的管理员账号。
二、步骤1:创建“无登录权限”的系统账号
创建一个专用账号(例如命名为 tuser
),并配置以下限制:
- 禁止交互式登录(指定
nologin
为登录shell); - 无需家目录(或创建极简家目录,避免冗余文件);
- 属于系统账号(UID < 1000,避免与普通用户混淆)。
执行以下命令创建账号:
sudo useradd -r -m -d /home/tuser -s /usr/sbin/nologin tuser
- 参数说明:
-r
:创建系统账号(UID 自动分配 < 1000);-m -d /home/tuser
:创建家目录(若无需家目录,可去掉-m
);-s /usr/sbin/nologin
:指定登录shell为nologin
(禁止交互式登录,尝试登录时会提示“此账号无法登录”)。
三、步骤2:设置账号密码(用于SSH认证)
虽然账号无法交互式登录,但 SSH 动态转发需要验证身份(密码或密钥),因此需为 tuser
设置密码:
sudo passwd tuser
按提示输入密码(建议设置复杂密码,避免泄露),并牢记该密码(后续客户端连接SOCKS代理需使用)。
四、步骤3:配置 SSHD(允许SOCKS代理,禁止登录)
SSH 服务的配置文件为 /etc/ssh/sshd_config
,需修改此文件以:
- 允许
tuser
使用 SSH 动态端口转发(SOCKS代理); - 严格禁止
tuser
进行交互式登录(即使意外启用shell也无法登录)。
4.1 备份原始配置文件(避免改错无法恢复)
sudo cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak
4.2 编辑 SSHD 配置文件
使用 nano
或 vim
打开配置文件:
sudo nano /etc/ssh/sshd_config
在文件末尾添加以下内容(针对 tuser
的专属限制):
# 仅允许 tuser 使用 SSH 动态端口转发(SOCKS代理),禁止其他所有操作
Match User tuser
# 禁止交互式登录(即使shell被修改,也无法获取交互终端)
PermitTTY no
# 允许动态端口转发(核心:开启SOCKS代理功能)
AllowTcpForwarding yes
# 仅允许动态转发(禁止本地端口转发和远程端口转发,进一步限制权限)
AllowStreamLocalForwarding no
# 禁止 X11 转发(避免图形界面登录)
X11Forwarding no
# 禁止 agent 转发(避免SSH密钥泄露风险)
AllowAgentForwarding no
# 指定端口
Port 2222
- 关键逻辑:
Match User tuser
表示以下配置仅对tuser
生效,不影响其他账号;AllowTcpForwarding yes
是开启SOCKS代理的核心,其他no
选项均为限制权限,确保账号仅能用于代理。
4.3 验证配置文件合法性
修改后需验证配置是否正确,避免 SSH 服务启动失败:
sudo sshd -t
若执行后无任何输出,说明配置合法;若有错误提示,需根据提示修正(例如语法错误、参数冲突)。
4.4 重启 SSH 服务(应用配置)
sudo systemctl restart sshd
确认服务状态(确保重启成功):
sudo systemctl status sshd
输出中显示 active (running)
即表示服务正常。
五、步骤4:测试 SOCKS 代理(客户端验证)
在需要使用代理的设备(如本地电脑、手机)上,通过 SSH 客户端连接 Debian 12 服务器,建立 SOCKS 代理。以下以 Linux/macOS 终端 和 Windows PowerShell 为例:
5.1 Linux/macOS 终端
执行以下命令,通过 tuser
建立 SOCKS 5 代理:
ssh -D 1080 -N -f tuser@你的Debian服务器IP
- 参数说明:
-D 1080
:指定本地 SOCKS 代理端口为 1080(可自定义,如 1081、8080,需确保本地端口未被占用);-N
:不执行远程命令(仅建立转发,符合我们“禁止命令执行”的配置);-f
:后台运行(执行后终端可继续使用,无需保持窗口打开);tuser@你的Debian服务器IP
:目标服务器的账号和IP(例如tuser@192.168.1.100
)。
执行后会提示输入 tuser
的密码,输入正确后代理即建立。
5.2 Windows PowerShell
Windows 10/11 自带 OpenSSH 客户端,可直接在 PowerShell 中执行类似命令:
ssh -D 1080 -N tuser@你的Debian服务器IP
- 注意:Windows 不支持
-f
后台运行参数,需保持 PowerShell 窗口打开(关闭窗口则代理断开);若需后台运行,可使用第三方工具(如PuTTY
、Xshell
)的“后台最小化”功能。
5.3 验证代理可用性
代理建立后,可通过以下方式测试:
- 在浏览器(如 Chrome)中配置 SOCKS 代理:
- 进入“设置 → 高级 → 系统 → 打开计算机的代理设置”;
- 启用“手动设置代理”,选择“SOCKS 代理”,地址填
127.0.0.1
,端口填1080
(与命令中-D
后的端口一致),保存。
- 访问
https://ipinfo.io
,查看当前 IP 是否为 Debian 服务器的公网 IP(若为则代理生效)。
六、安全加固建议(可选)
为进一步提升安全性,避免账号被滥用,可添加以下配置:
1. 限制 SSH 登录IP(仅允许指定IP使用代理)
在 sshd_config
的 Match User tuser
块中添加:
# 仅允许 192.168.1.0/24 网段的设备连接(替换为你的实际IP段)
AllowUsers tuser@192.168.1.*
这样仅指定IP段的设备能使用 tuser
建立代理。
2. 使用 SSH 密钥认证(替代密码,更安全)
- 客户端生成密钥对(以 Linux 为例):
按提示生成密钥(默认保存在ssh-keygen -t ed25519 -C "socks-proxy-key"
~/.ssh/id_ed25519
)。 - 将公钥上传到 Debian 服务器的
tuser
家目录:ssh-copy-id -i ~/.ssh/id_ed25519.pub tuser@你的Debian服务器IP
- 在
sshd_config
中禁用密码认证(仅允许密钥):Match User tuser # 禁用密码认证,仅允许密钥 PasswordAuthentication no PubkeyAuthentication yes # 其他配置不变...
- 重启 SSH 服务:
sudo systemctl restart sshd
。 此后客户端需通过密钥连接代理,无需输入密码,且安全性更高。
七、常见问题排查
-
客户端连接提示“Permission denied”:
- 检查
tuser
密码是否正确; - 查看
sshd_config
中PasswordAuthentication
是否为yes
(若用密码认证); - 检查服务器防火墙是否允许 22 端口(SSH默认端口):
sudo ufw allow 22
(若启用了ufw
防火墙)。
- 检查
-
代理建立后无法上网:
- 检查 Debian 服务器是否开启 IP 转发(SOCKS 代理需要):
# 临时开启 IP 转发 sudo sysctl -w net.ipv4.ip_forward=1 # 永久开启(重启生效) sudo echo "net.ipv4.ip_forward=1" >> /etc/sysctl.conf sudo sysctl -p
- 检查服务器是否有防火墙规则阻止转发流量:
sudo iptables -L
(需确保转发规则允许)。
- 检查 Debian 服务器是否开启 IP 转发(SOCKS 代理需要):
-
SSHD 服务重启失败:
- 执行
sudo sshd -t
查看配置错误; - 对比备份文件
sshd_config.bak
,恢复错误配置。
- 执行
-
Unable to negotiate with x.x.x.x port 55488: no matching host key type found. Their offer: ssh-rsa,ssh-dss [preauth]
# 在文件中添加以下内容(可以放在文件末尾):
# 允许使用rsa密钥算法以兼容旧客户端
HostKeyAlgorithms +ssh-rsa
PubkeyAcceptedKeyTypes +ssh-rsa
通过以上步骤,即可在 Debian 12 中创建一个仅用于 SOCKS 代理、无法直接登录的安全账号,满足代理需求的同时避免系统被非法操作。