|
|
#!/bin/bash
|
|
|
# =============================================================================
|
|
|
# P600 机载电脑 - SSH 隧道自启服务安装脚本
|
|
|
# 用法: 传到 P600 上执行: bash setup_p600_tunnel.sh
|
|
|
# 功能: 开机自启 rosbridge 隧道,断线自动重连
|
|
|
# 隧道: P600:8080 → 云服务器 121.41.216.243:9090
|
|
|
# 网页连接地址: ws://121.41.216.243:9090
|
|
|
# =============================================================================
|
|
|
|
|
|
set -e
|
|
|
|
|
|
SERVICE_NAME="rosbridge-tunnel.service"
|
|
|
SERVICE_PATH="/etc/systemd/system/${SERVICE_NAME}"
|
|
|
SSH_HOST="root@121.41.216.243"
|
|
|
SSH_PORT="9090"
|
|
|
LOCAL_PORT="8080"
|
|
|
|
|
|
echo "========================================="
|
|
|
echo " P600 SSH 隧道自启服务安装"
|
|
|
echo "========================================="
|
|
|
echo ""
|
|
|
|
|
|
# 检查是否以 root 运行
|
|
|
if [ "$EUID" -ne 0 ]; then
|
|
|
echo "❌ 请使用 root 用户运行: sudo bash setup_p600_tunnel.sh"
|
|
|
exit 1
|
|
|
fi
|
|
|
|
|
|
# 检查 SSH 连接是否可用
|
|
|
echo "🔍 测试 SSH 连接到 ${SSH_HOST} ..."
|
|
|
if ssh -o StrictHostKeyChecking=no -o ConnectTimeout=10 "${SSH_HOST}" "echo OK" 2>/dev/null; then
|
|
|
echo "✅ SSH 连接成功"
|
|
|
else
|
|
|
echo ""
|
|
|
echo "⚠️ SSH 连接失败,请确认:"
|
|
|
echo " ① P600 能访问外网"
|
|
|
echo " ② 密码为: pdl@#YwC\$WRWFyHKxC8nyu!4"
|
|
|
echo ""
|
|
|
echo " 手动测试: ssh ${SSH_HOST}"
|
|
|
echo ""
|
|
|
read -p "是否继续安装服务?(y/n)" -n 1 -r
|
|
|
echo
|
|
|
if [[ ! $REPLY =~ ^[Yy]$ ]]; then
|
|
|
exit 1
|
|
|
fi
|
|
|
fi
|
|
|
|
|
|
# 检查 sshpass
|
|
|
SSHPASS_CMD=""
|
|
|
if command -v sshpass &> /dev/null; then
|
|
|
SSHPASS_CMD="sshpass -p 'pdl@#YwC\$WRWFyHKxC8nyu!4'"
|
|
|
echo "✅ 已安装 sshpass,将使用密码自动登录"
|
|
|
else
|
|
|
echo ""
|
|
|
echo "⚠️ 未安装 sshpass,需要先配置 SSH 密钥登录"
|
|
|
echo " 执行以下命令配置免密登录:"
|
|
|
echo ""
|
|
|
echo " ssh-copy-id ${SSH_HOST}"
|
|
|
echo " # 密码: pdl@#YwC\$WRWFyHKxC8nyu!4"
|
|
|
echo ""
|
|
|
fi
|
|
|
|
|
|
# 创建 systemd 服务
|
|
|
echo ""
|
|
|
echo "📝 创建系统服务 ${SERVICE_NAME} ..."
|
|
|
|
|
|
cat > "${SERVICE_PATH}" << SERVICEEOF
|
|
|
[Unit]
|
|
|
Description=ROSbridge SSH Tunnel - P600 to Cloud Server
|
|
|
After=network-online.target
|
|
|
Wants=network-online.target
|
|
|
StartLimitIntervalSec=60
|
|
|
StartLimitBurst=5
|
|
|
|
|
|
[Service]
|
|
|
Type=simple
|
|
|
ExecStart=/bin/bash -c '${SSHPASS_CMD} /usr/bin/ssh -NT \
|
|
|
-o ServerAliveInterval=30 \
|
|
|
-o ServerAliveCountMax=3 \
|
|
|
-o StrictHostKeyChecking=no \
|
|
|
-o ExitOnForwardFailure=yes \
|
|
|
-R ${SSH_PORT}:localhost:${LOCAL_PORT} \
|
|
|
${SSH_HOST}'
|
|
|
|
|
|
Restart=always
|
|
|
RestartSec=10
|
|
|
User=root
|
|
|
|
|
|
[Install]
|
|
|
WantedBy=multi-user.target
|
|
|
SERVICEEOF
|
|
|
|
|
|
echo "✅ 服务文件已创建"
|
|
|
|
|
|
# 重载 systemd
|
|
|
echo "🔄 重载 systemd 配置..."
|
|
|
systemctl daemon-reload
|
|
|
|
|
|
# 启用服务
|
|
|
echo "🔗 启用开机自启..."
|
|
|
systemctl enable "${SERVICE_NAME}"
|
|
|
|
|
|
# 启动服务
|
|
|
echo "🚀 启动隧道服务..."
|
|
|
systemctl restart "${SERVICE_NAME}"
|
|
|
|
|
|
# 等待 3 秒
|
|
|
sleep 3
|
|
|
|
|
|
# 检查状态
|
|
|
echo ""
|
|
|
echo "📊 服务状态:"
|
|
|
systemctl status "${SERVICE_NAME}" --no-pager | head -12
|
|
|
|
|
|
echo ""
|
|
|
echo "========================================="
|
|
|
echo " ✅ 安装完成!"
|
|
|
echo "========================================="
|
|
|
echo ""
|
|
|
echo " 服务管理命令:"
|
|
|
echo " 查看状态: sudo systemctl status ${SERVICE_NAME}"
|
|
|
echo " 启动: sudo systemctl start ${SERVICE_NAME}"
|
|
|
echo " 停止: sudo systemctl stop ${SERVICE_NAME}"
|
|
|
echo " 重启: sudo systemctl restart ${SERVICE_NAME}"
|
|
|
echo " 查看日志: sudo journalctl -u ${SERVICE_NAME} -f"
|
|
|
echo ""
|
|
|
echo " 网页连接地址: ws://121.41.216.243:${SSH_PORT}"
|
|
|
echo ""
|