#!/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 ""