让 AI Agent 从服务器通过 SSH 远程连接和控制 Mac/Linux 电脑,无需在被控电脑上安装任何 agent 工具。
核心原理:
对比传统方案:
方案Agent位置被控电脑需要安装架构传统方案本地电脑需要本地控制本地本技能服务器不需要远程控制远程
text
┌─────────────┐ 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)
bash
ssh -i $SSH_KEY_PATH -p $SSH_TARGET_PORT $SSH_TARGET_USER@$SSH_TARGET_HOST 'echo "SSH OK"'
bash
# 查看目录
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/
bash
# 打开应用
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'"'"''
bash
# 获取应用名称
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'
bash
# 查看系统版本
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'
bash
# 查看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密钥对 bash
ssh-keygen -t ed25519 -C "ai@server"
添加公钥到远程电脑 bash
echo "公钥内容" >> ~/.ssh/authorized_keys
chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys
配置内网穿透(如果电脑在内网)
为什么需要内网穿透? 大多数家庭/办公网络的电脑没有公网IP,无法直接从外网访问。内网穿透工具可以将内网端口映射到公网,让外部设备能够连接进来。
常用内网穿透工具: 工具特点官网花生壳国内老牌,稳定,支持SSHoray.comngrok国际流行,配置简单ngrok.comfrp开源免费,可自建服务器github.com/fatedier/frpNATAPP国内服务,免费额度natapp.cn 安全优势——本地完全控制:
与其他远程控制方案不同,本技能的安全性完全由你掌控:
💡 为什么"关闭穿透"是真正的安全?
服务器的安全靠"规则"——端口持续开放,靠防火墙规则防护。 个人电脑 + 穿透工具的安全靠"开关"——穿透工具不运行,外部根本找不到你。 这不是"防护",这是 物理隔离。关闭穿透 = 攻击面归零。
使用建议:
安装openssh-server bash
sudo apt install openssh-server
配置SSH bash
sudo nano /etc/ssh/sshd_config
# 确保有:
PasswordAuthentication no
PubkeyAuthentication yes
⚠️ 安全建议:禁用密码认证,只允许密钥认证
重启SSH服务 bash
sudo systemctl restart sshd
配置内网穿透(同上)
可以在远程电脑的 ~/.ssh/authorized_keys 中限制可执行的命令
示例: text
command="/usr/local/bin/limited.sh",no-pty,permitopen="*",ssh-ed25519 AAAA...
使用专用受限账户(而非 root/管理员):
aiagent密钥权限限制:
from= 限制连接来源 IPcommand= 限制可执行命令no-pty 禁止分配伪终端permitopen= 限制端口转发示例( ~/.ssh/authorized_keys):
text
from="你的服务器IP",no-pty,command="/bin/false",ssh-ed25519 AAAA...
确认公钥已添加到 ~/.ssh/authorized_keys
确认文件权限正确: bash
chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys
ServerAliveInterval 保持连接