2026-02-04 11:35:09 +08:00
|
|
|
|
#!/bin/bash
|
|
|
|
|
|
# SSH反向隧道设置脚本
|
|
|
|
|
|
|
|
|
|
|
|
echo "=== SSH反向隧道设置脚本 ==="
|
|
|
|
|
|
|
|
|
|
|
|
# 1. 检查SSH客户端是否安装
|
|
|
|
|
|
echo "1. 检查SSH客户端..."
|
|
|
|
|
|
if command -v ssh &> /dev/null; then
|
|
|
|
|
|
echo "✓ SSH客户端已安装: $(which ssh)"
|
|
|
|
|
|
ssh -V
|
|
|
|
|
|
else
|
|
|
|
|
|
echo "✗ SSH客户端未安装,开始安装..."
|
|
|
|
|
|
|
|
|
|
|
|
# 检测Linux发行版
|
|
|
|
|
|
if [ -f /etc/redhat-release ]; then
|
|
|
|
|
|
# CentOS/RHEL
|
|
|
|
|
|
echo "检测到 CentOS/RHEL 系统"
|
|
|
|
|
|
sudo yum install -y openssh-clients openssh-server
|
|
|
|
|
|
elif [ -f /etc/debian_version ]; then
|
|
|
|
|
|
# Debian/Ubuntu
|
|
|
|
|
|
echo "检测到 Debian/Ubuntu 系统"
|
|
|
|
|
|
sudo apt-get update
|
|
|
|
|
|
sudo apt-get install -y openssh-client openssh-server
|
|
|
|
|
|
elif [ -f /etc/arch-release ]; then
|
|
|
|
|
|
# Arch Linux
|
|
|
|
|
|
echo "检测到 Arch Linux 系统"
|
|
|
|
|
|
sudo pacman -S --noconfirm openssh
|
|
|
|
|
|
else
|
|
|
|
|
|
echo "无法自动检测系统类型,请手动安装 openssh-client"
|
|
|
|
|
|
exit 1
|
|
|
|
|
|
fi
|
|
|
|
|
|
|
|
|
|
|
|
# 验证安装
|
|
|
|
|
|
if command -v ssh &> /dev/null; then
|
|
|
|
|
|
echo "✓ SSH客户端安装成功"
|
|
|
|
|
|
ssh -V
|
|
|
|
|
|
else
|
|
|
|
|
|
echo "✗ SSH客户端安装失败,请手动安装"
|
|
|
|
|
|
exit 1
|
|
|
|
|
|
fi
|
|
|
|
|
|
fi
|
|
|
|
|
|
|
|
|
|
|
|
echo ""
|
|
|
|
|
|
echo "2. 检查SSH服务是否运行..."
|
|
|
|
|
|
if systemctl is-active --quiet sshd || systemctl is-active --quiet ssh; then
|
|
|
|
|
|
echo "✓ SSH服务正在运行"
|
|
|
|
|
|
else
|
|
|
|
|
|
echo "⚠ SSH服务未运行,启动SSH服务..."
|
|
|
|
|
|
sudo systemctl start sshd 2>/dev/null || sudo systemctl start ssh
|
|
|
|
|
|
sudo systemctl enable sshd 2>/dev/null || sudo systemctl enable ssh
|
|
|
|
|
|
fi
|
|
|
|
|
|
|
|
|
|
|
|
echo ""
|
|
|
|
|
|
echo "3. 生成SSH密钥(如果不存在)..."
|
|
|
|
|
|
if [ ! -f ~/.ssh/id_rsa ]; then
|
|
|
|
|
|
echo "生成SSH密钥..."
|
|
|
|
|
|
ssh-keygen -t rsa -b 2048 -f ~/.ssh/id_rsa -N ""
|
|
|
|
|
|
echo "✓ SSH密钥已生成"
|
|
|
|
|
|
else
|
|
|
|
|
|
echo "✓ SSH密钥已存在"
|
|
|
|
|
|
fi
|
|
|
|
|
|
|
|
|
|
|
|
echo ""
|
|
|
|
|
|
echo "4. 配置SSH密钥免密登录(可选)..."
|
|
|
|
|
|
read -p "是否配置免密登录到阿里云服务器?(y/n): " setup_key
|
|
|
|
|
|
if [ "$setup_key" = "y" ] || [ "$setup_key" = "Y" ]; then
|
|
|
|
|
|
read -p "请输入阿里云服务器IP: " server_ip
|
|
|
|
|
|
read -p "请输入阿里云服务器用户名(默认root): " server_user
|
|
|
|
|
|
server_user=${server_user:-root}
|
|
|
|
|
|
|
|
|
|
|
|
echo "复制SSH公钥到阿里云服务器..."
|
|
|
|
|
|
ssh-copy-id -p 22 ${server_user}@${server_ip}
|
|
|
|
|
|
|
|
|
|
|
|
if [ $? -eq 0 ]; then
|
|
|
|
|
|
echo "✓ 免密登录配置成功"
|
|
|
|
|
|
else
|
|
|
|
|
|
echo "⚠ 免密登录配置失败,请手动配置或使用密码登录"
|
|
|
|
|
|
fi
|
|
|
|
|
|
fi
|
|
|
|
|
|
|
|
|
|
|
|
echo ""
|
|
|
|
|
|
echo "5. 测试SSH连接..."
|
|
|
|
|
|
read -p "请输入阿里云服务器IP(用于测试连接): " test_ip
|
|
|
|
|
|
read -p "请输入用户名(默认root): " test_user
|
|
|
|
|
|
test_user=${test_user:-root}
|
|
|
|
|
|
|
|
|
|
|
|
echo "测试连接到 ${test_user}@${test_ip}..."
|
|
|
|
|
|
ssh -o ConnectTimeout=5 -p 22 ${test_user}@${test_ip} "echo '连接成功!'"
|
|
|
|
|
|
|
|
|
|
|
|
if [ $? -eq 0 ]; then
|
|
|
|
|
|
echo "✓ SSH连接测试成功"
|
|
|
|
|
|
else
|
|
|
|
|
|
echo "✗ SSH连接测试失败,请检查:"
|
|
|
|
|
|
echo " - 网络连接是否正常"
|
|
|
|
|
|
echo " - 阿里云服务器防火墙是否开放22端口"
|
|
|
|
|
|
echo " - 用户名和密码是否正确"
|
|
|
|
|
|
fi
|
|
|
|
|
|
|
|
|
|
|
|
echo ""
|
|
|
|
|
|
echo "=== 设置完成 ==="
|
|
|
|
|
|
echo ""
|
|
|
|
|
|
echo "使用方法:"
|
|
|
|
|
|
echo " 手动连接: ssh -fN -R 2222:localhost:22 root@123.56.98.4 -p 22"
|
|
|
|
|
|
echo ""
|
|
|
|
|
|
echo " 或者使用自动重连脚本(见下方)"
|
|
|
|
|
|
|
|
|
|
|
|
|
2026-02-26 16:39:29 +08:00
|
|
|
|
|
|
|
|
|
|
|