ssh-manager
Installation
SKILL.md
SSH 连接管理器
当使用此技能
- 需要通过 SSH 连接远程主机(小m、Peter's Mac Mini 等)
- Tailscale SSH 连接问题排查
- 执行远程命令
- 配置 SSH 隧道或端口转发
- 处理主机密钥验证问题
- 绕过代理访问内网设备
已知主机列表
| 主机名 | 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 可能会变化,应该动态获取
核心功能
1. 获取动态 Tailscale IP
# 获取指定主机的当前 Tailscale IP
tailscale status | grep "主机名" | awk '{print $1}'
2. 标准化 SSH 连接
# 推荐:使用 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
3. 绕过代理(重要!)
本地 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})
4. 主机状态检查
# 检查主机是否在线
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
常见问题
Q: SSH 连接超时
- 检查 Tailscale 状态:
tailscale status - 确认主机在线:
tailscale ping 主机名 - 检查防火墙是否允许 SSH(端口 22)
Q: 主机密钥验证失败
使用 -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null
Q: HTTP 请求返回 502
本地 Clash 代理干扰,添加 --noproxy "*" 或设置 no_proxy=100.0.0.0/8
Q: Tailscale IP 变化
始终用 tailscale status 获取当前 IP,不要硬编码
触发词
- "SSH 连接"
- "连接远程主机"
- "Tailscale SSH"
- "SSH 隧道"
- "端口转发"
- "远程执行命令"
- "SSH 问题"
相关文件
~/clawd/MEMORY.md- 主机配置信息~/.ssh/known_hosts- 已知主机密钥~/.ssh/config- SSH 配置文件
Created: 2026-03-06
Weekly Installs
1
Repository
aaaaqwq/claude-…e-skillsGitHub Stars
52
First Seen
Mar 17, 2026
Security Audits