You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
software/setup_p600_tunnel.sh

129 lines
3.5 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

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