From agi-super-team
Manages SSH connections to remote hosts via Tailscale, including dynamic IP resolution, proxy bypass, port forwarding, and host diagnostics.
How this skill is triggered — by the user, by Claude, or both
Slash command
/agi-super-team:ssh-managerThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
- 需要通过 SSH 连接远程主机(小m、Peter's Mac Mini 等)
| 主机名 | Tailscale IP | 用户名 | 用途 |
|---|---|---|---|
| 小m (Mac Mini M2) | 动态 | danielli | Daniel 的 Mac Mini |
| Peter's Mac Mini | 100.118.109.75 | peterqiu | Peter 团队 |
| daniel-ubuntu | 100.112.88.20 | aa | 本机(Ubuntu) |
⚠️ 注意:Tailscale IP 可能会变化,应该动态获取
# 获取指定主机的当前 Tailscale IP
tailscale status | grep "主机名" | awk '{print $1}'
# 推荐:使用 Tailscale MagicDNS 名称
ssh -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null 用户@主机名.tail0db0a3.ts.net
# 或使用动态 IP
IP=$(tailscale status | grep "主机名" | awk '{print $1}')
ssh -o StrictHostKeyChecking=no 用户@$IP
本地 Clash 代理会拦截 100.x.x.x 流量导致 502 错误:
# SSH 不需要(走 Tailscale),但 HTTP/API 调用需要绕过
curl --noproxy "*" "http://TAILSCALE_IP:端口/api/endpoint"
# Python
requests.get(url, proxies={"http": None, "https": None})
# 检查主机是否在线
tailscale ping 主机名 --timeout=5s
# 查看详细状态
tailscale status | grep 主机名
connect.sh - 智能 SSH 连接#!/bin/bash
# 使用:./connect.sh <主机名> [命令]
# 示例:./connect.sh daniellimac-mini "ollama list"
HOST=$1
CMD=$2
# 获取动态 IP
IP=$(tailscale status | grep "$HOST" | awk '{print $1}')
if [ -z "$IP" ]; then
echo "❌ 主机 $HOST 未找到或不在线"
tailscale status | grep -E "offline|online" | head -5
exit 1
fi
# 检查是否在线
STATUS=$(tailscale status | grep "$HOST" | awk '{print $NF}')
if [[ "$STATUS" == "offline"* ]]; then
echo "⚠️ 主机 $HOST 当前离线 ($STATUS)"
exit 1
fi
echo "🔗 连接 $HOST ($IP)..."
if [ -z "$CMD" ]; then
# 交互式 SSH
ssh -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null danielli@$IP
else
# 执行命令
ssh -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null danielli@$IP "$CMD"
fi
tunnel.sh - 端口转发#!/bin/bash
# 使用:./tunnel.sh <主机名> <远程端口> [本地端口]
# 示例:./tunnel.sh daniellimac-mini 11434 11434
HOST=$1
REMOTE_PORT=$2
LOCAL_PORT=${3:-$REMOTE_PORT}
IP=$(tailscale status | grep "$HOST" | awk '{print $1}')
if [ -z "$IP" ]; then
echo "❌ 主机 $HOST 未找到"
exit 1
fi
echo "🔗 建立隧道: localhost:$LOCAL_PORT -> $HOST:$REMOTE_PORT"
ssh -N -L $LOCAL_PORT:localhost:$REMOTE_PORT danielli@$IP
check-host.sh - 主机诊断#!/bin/bash
# 使用:./check-host.sh <主机名>
HOST=$1
echo "=== Tailscale 状态 ==="
tailscale status | grep -E "$HOST|online" | head -5
echo ""
echo "=== IP 地址 ==="
IP=$(tailscale status | grep "$HOST" | awk '{print $1}')
echo "IP: $IP"
echo ""
echo "=== 连通性测试 ==="
if ping -c 2 -W 3 $IP > /dev/null 2>&1; then
echo "✅ Ping 成功"
else
echo "❌ Ping 失败"
fi
echo ""
echo "=== SSH 测试 ==="
timeout 5 ssh -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null -o ConnectTimeout=3 danielli@$IP "echo 'SSH 连接成功'" 2>&1
tailscale statustailscale ping 主机名使用 -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null
本地 Clash 代理干扰,添加 --noproxy "*" 或设置 no_proxy=100.0.0.0/8
始终用 tailscale status 获取当前 IP,不要硬编码
~/clawd/MEMORY.md - 主机配置信息~/.ssh/known_hosts - 已知主机密钥~/.ssh/config - SSH 配置文件Created: 2026-03-06
npx claudepluginhub aaaaqwq/agi-super-team --plugin agi-super-teamManages and troubleshoots Tailscale tailnet devices: resolve device aliases, test reachability, fix SSH auth failures, and restore remote access.
Manages Tailscale mesh VPN networks via CLI and API: check status/peers, ping devices, list tailnet devices, send files, expose services with serve/funnel, create auth keys.
Manages Tailscale mesh VPN: connect/disconnect/status, SSH access, serve local services, funnel traffic, file copy, DNS queries, exit nodes. For secure networking tasks.