Install
openclaw skills install ssh-remote-controlSSH远程控制电脑 - 让AI Agent通过SSH连接和操作远程Mac/Linux电脑,无需在被控电脑上安装任何agent工具。一个服务器上的AI,触手伸向多台远程设备。
openclaw skills install ssh-remote-control让 AI Agent 从服务器通过 SSH 远程连接和控制 Mac/Linux 电脑,无需在被控电脑上安装任何 agent 工具。
核心原理:
对比传统方案:
| 方案 | Agent位置 | 被控电脑需要安装 | 架构 |
|---|---|---|---|
| 传统方案 | 本地电脑 | 需要 | 本地控制本地 |
| 本技能 | 服务器 | 不需要 | 远程控制远程 |
┌─────────────┐ SSH ┌─────────────────┐
│ AI Agent │ ──────────> │ Remote Computer │
│ (服务器) │ 加密隧道 │ (Mac/Linux) │
│ │ <────────── │ │
│ 执行命令 │ 返回结果 │ 无需安装agent │
└─────────────┘ └─────────────────┘
| 变量名 | 必填 | 说明 |
|---|---|---|
SSH_TARGET_HOST | 是 | 远程电脑的公网地址或域名 |
SSH_TARGET_PORT | 是 | SSH 端口(默认22) |
SSH_TARGET_USER | 是 | 远程电脑用户名 |
SSH_KEY_PATH | 是 | 本地私钥路径 |
DEFAULT_SHELL | 否 | 远程电脑默认shell(默认/bin/zsh) |
ssh -i $SSH_KEY_PATH -p $SSH_TARGET_PORT $SSH_TARGET_USER@$SSH_TARGET_HOST 'echo "SSH OK"'
# 查看目录
ssh -i $SSH_KEY_PATH -p $SSH_TARGET_PORT $SSH_TARGET_USER@$SSH_TARGET_HOST 'ls -la ~/Desktop/'
# 查看文件内容
ssh -i $SSH_KEY_PATH -p $SSH_TARGET_PORT $SSH_TARGET_USER@$SSH_TARGET_HOST 'cat ~/Desktop/test.txt'
# 创建文件
ssh -i $SSH_KEY_PATH -p $SSH_TARGET_PORT $SSH_TARGET_USER@$SSH_TARGET_HOST 'cat > ~/Desktop/ai_created.txt << '"'"'EOF'"'"'
这是AI创建的文件
EOF'
# 上传文件到远程电脑
scp -i $SSH_KEY_PATH -P $SSH_TARGET_PORT localfile $SSH_TARGET_USER@$SSH_TARGET_HOST:/path/to/remote/
# 从远程电脑下载文件
scp -i $SSH_KEY_PATH -P $SSH_TARGET_PORT $SSH_TARGET_USER@$SSH_TARGET_HOST:/path/to/remote/file localpath/
# 打开应用
ssh -i $SSH_KEY_PATH -p $SSH_TARGET_PORT $SSH_TARGET_USER@$SSH_TARGET_HOST 'open -a "Safari"'
# 关闭应用
ssh -i $SSH_KEY_PATH -p $SSH_TARGET_PORT $SSH_TARGET_USER@$SSH_TARGET_HOST 'osascript -e '"'"'quit application "Safari"'"'"''
# 查看运行中的程序
ssh -i $SSH_KEY_PATH -p $SSH_TARGET_PORT $SSH_TARGET_USER@$SSH_TARGET_HOST 'osascript -e '"'"'tell application "System Events" to get name of every process'"'"''
# 获取应用名称
ssh -i $SSH_KEY_PATH -p $SSH_TARGET_PORT $SSH_TARGET_USER@$SSH_TARGET_HOST 'osascript -e '"'"'tell application "NetEase Cloud Music" to name'"'"''
# 获取Chrome当前标签
ssh -i $SSH_KEY_PATH -p $SSH_TARGET_PORT $SSH_TARGET_USER@$SSH_TARGET_HOST 'osascript -e '"'"'tell application "Google Chrome" to get URL of every tab of every window'"'"''
# 截屏
ssh -i $SSH_KEY_PATH -p $SSH_TARGET_PORT $SSH_TARGET_USER@$SSH_TARGET_HOST 'screencapture ~/Desktop/screenshot.png'
# 查看系统版本
ssh -i $SSH_KEY_PATH -p $SSH_TARGET_PORT $SSH_TARGET_USER@$SSH_TARGET_HOST 'sw_vers'
# 查看资源使用
ssh -i $SSH_KEY_PATH -p $SSH_TARGET_PORT $SSH_TARGET_USER@$SSH_TARGET_HOST 'top -l 1 | head -10'
# 查看磁盘空间
ssh -i $SSH_KEY_PATH -p $SSH_TARGET_PORT $SSH_TARGET_USER@$SSH_TARGET_HOST 'df -h'
# 查看运行进程
ssh -i $SSH_KEY_PATH -p $SSH_TARGET_PORT $SSH_TARGET_USER@$SSH_TARGET_HOST 'ps aux | head -20'
# 查看Node.js版本
ssh -i $SSH_KEY_PATH -p $SSH_TARGET_PORT $SSH_TARGET_USER@$SSH_TARGET_HOST 'node --version'
# 查看Git状态
ssh -i $SSH_KEY_PATH -p $SSH_TARGET_PORT $SSH_TARGET_USER@$SSH_TARGET_HOST 'cd ~/project && git status'
# Docker操作
ssh -i $SSH_KEY_PATH -p $SSH_TARGET_PORT $SSH_TARGET_USER@$SSH_TARGET_HOST 'docker ps'
开启远程登录
生成SSH密钥对
ssh-keygen -t ed25519 -C "ai@server"
添加公钥到远程电脑
echo "公钥内容" >> ~/.ssh/authorized_keys
chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys
配置内网穿透(如果电脑在内网)
为什么需要内网穿透? 大多数家庭/办公网络的电脑没有公网IP,无法直接从外网访问。内网穿透工具可以将内网端口映射到公网,让外部设备能够连接进来。
常用内网穿透工具:
| 工具 | 特点 | 官网 |
|---|---|---|
| 花生壳 | 国内老牌,稳定,支持SSH | oray.com |
| ngrok | 国际流行,配置简单 | ngrok.com |
| frp | 开源免费,可自建服务器 | github.com/fatedier/frp |
| NATAPP | 国内服务,免费额度 | natapp.cn |
安全优势——本地完全控制:
与其他远程控制方案不同,本技能的安全性完全由你掌控:
💡 为什么"关闭穿透"是真正的安全?
服务器的安全靠"规则"——端口持续开放,靠防火墙规则防护。 个人电脑 + 穿透工具的安全靠"开关"——穿透工具不运行,外部根本找不到你。 这不是"防护",这是物理隔离。关闭穿透 = 攻击面归零。
使用建议:
安装openssh-server
sudo apt install openssh-server
配置SSH
sudo nano /etc/ssh/sshd_config
# 确保有:
PasswordAuthentication no
PubkeyAuthentication yes
⚠️ 安全建议:禁用密码认证,只允许密钥认证
重启SSH服务
sudo systemctl restart sshd
配置内网穿透(同上)
~/.ssh/authorized_keys中限制可执行的命令command="/usr/local/bin/limited.sh",no-pty,permitopen="*",ssh-ed25519 AAAA...
使用专用受限账户(而非 root/管理员):
aiagent密钥权限限制:
from= 限制连接来源 IPcommand= 限制可执行命令no-pty 禁止分配伪终端permitopen= 限制端口转发示例(~/.ssh/authorized_keys):
from="你的服务器IP",no-pty,command="/bin/false",ssh-ed25519 AAAA...
~/.ssh/authorized_keyschmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys
ServerAliveInterval保持连接