MCP SSH代理是一个基于模型上下文协议(MCP)的服务器,用于管理和控制SSH连接。它能够与Claude Desktop等支持MCP的客户端无缝集成,借助人工智能技术提供强大的SSH操作能力。
npx @aiondadotcom/mcp-ssh
npm install -g @aiondadotcom/mcp-ssh
git clone https://github.com/aiondadotcom/mcp-ssh.git
cd mcp-ssh
npm install
npm start
要将此MCP服务器与Claude Desktop配合使用,请在MCP设置文件中添加以下配置:
~/Library/Application Support/Claude/claude_desktop_config.json%APPDATA%/Claude/claude_desktop_config.json{
"mcpServers": {
"mcp-ssh": {
"command": "npx",
"args": ["@aiondadotcom/mcp-ssh"]
}
}
}
添加此配置后,重启Claude Desktop。在与Claude的对话中即可使用SSH工具。
上图展示了MCP SSH Agent的实际运行情况,展示了它如何与支持MCP的客户端集成,以提供无缝的SSH操作。
此截图展示了MCP SSH Agent与Claude的集成,展示了AI助手如何通过MCP协议直接管理SSH连接并执行远程命令。
ssh/scp命令,而非JavaScript SSH库,确保操作的可靠性。~/.ssh/config和~/.ssh/known_hosts中自动发现主机。scp命令上传和下载文件。该代理提供以下MCP工具:
~/.ssh/config中的条目,然后是~/.ssh/known_hosts中的其他主机。ssh在远程主机上执行命令。scp将文件上传到远程主机。scp从远程主机下载文件。Claude Desktop的配置示例如下:
{
"mcpServers": {
"mcp-ssh": {
"command": "npx",
"args": ["@aiondadotcom/mcp-ssh"]
}
}
}
如果您希望手动运行服务器或与其他MCP客户端集成,可以使用以下配置:
{
"servers": {
"mcp-ssh": {
"command": "npx",
"args": ["@aiondadotcom/mcp-ssh"]
}
}
}
配置完成后,您可以向Claude提出以下SSH操作请求:
Claude将使用MCP SSH工具安全高效地执行这些操作。
该代理作为一个通过标准输入输出(STDIO)通信的MCP服务器运行。通过npm安装后,您可以直接使用它:
# 通过npx运行(推荐)
npx @aiondadotcom/mcp-ssh
# 或者全局安装后使用
mcp-ssh
# 开发时使用调试输出运行
npm start
服务器通过标准输入输出以简洁的JSON格式进行通信,非常适合Claude Desktop等MCP客户端。
MCP_SILENT=true:禁用调试输出(作为MCP服务器使用时会自动设置)该代理从标准的SSH配置文件中读取信息:
~/.ssh/config:SSH客户端配置~/.ssh/known_hosts:已知主机密钥请确保您的SSH密钥已正确配置,并可通过SSH代理或密钥文件访问。
~/.ssh/config以下是一个示例SSH配置文件,展示了各种连接场景:
# 全局设置 - 保持连接活跃
ServerAliveInterval 55
# 带有跳板主机的生产服务器
Host prod
Hostname 203.0.113.10
Port 22022
User deploy
IdentityFile ~/.ssh/id_prod_rsa
# 以root用户访问生产服务器(单独条目)
Host root@prod
Hostname 203.0.113.10
Port 22022
User root
IdentityFile ~/.ssh/id_prod_rsa
# 通过生产跳板主机访问的存档服务器
Host archive
Hostname 2001:db8:1f0:cafe::1
Port 22077
User archive-user
ProxyJump prod
# 具有特定配置的Web服务器
Host web1.example.com
Hostname 198.51.100.15
Port 22022
User root
IdentityFile ~/.ssh/id_ed25519
Host web2.example.com
Hostname 198.51.100.25
Port 22022
User root
IdentityFile ~/.ssh/id_ed25519
# 带有自定义密钥的数据库服务器
Host database
Hostname 203.0.113.50
Port 22077
User dbadmin
IdentityFile ~/.ssh/id_database_rsa
IdentitiesOnly yes
# 邮件服务器
Host mail1
Hostname 198.51.100.88
Port 22078
User mailuser
Host root@mail1
Hostname 198.51.100.88
Port 22078
User root
# 监控服务器
Host monitor
Hostname 203.0.113.100
Port 22077
User monitoring
IdentityFile ~/.ssh/id_monitor_ed25519
IdentitiesOnly yes
# 负载均衡器
Host lb-a
Hostname 198.51.100.200
Port 22077
User root
Host lb-b
Hostname 198.51.100.201
Port 22077
User root
此配置展示了:
ServerAliveInterval保持连接活跃。prod和root@prod)。ProxyJump通过堡垒主机访问服务器。IdentitiesOnly yes仅使用指定的密钥。MCP SSH代理会自动发现并使用您的SSH配置:
~/.ssh/config中的所有主机都可自动使用。ssh命令,因此所有配置选项都有效。与Claude Desktop的示例用法:
prod、archive、web1.example.com等。ProxyJump配置。web1.example.com上运行df -h" → 使用正确的用户、端口和密钥进行连接。ssh和scp已安装并在您的系统路径中。~/.ssh/config或~/.ssh/known_hosts中。运行时启用调试输出以查看详细的操作日志:
# 启用调试模式
MCP_SILENT=false npx @aiondadotcom/mcp-ssh
为了使MCP SSH代理正常工作,您需要设置SSH密钥认证。以下是完整的指南:
生成新的SSH密钥对(建议使用Ed25519以提高安全性):
# 生成Ed25519密钥(推荐)
ssh-keygen -t ed25519 -C "your-email@example.com"
# 或者生成RSA密钥(如果不支持Ed25519)
ssh-keygen -t rsa -b 4096 -C "your-email@example.com"
重要提示:提示输入密码短语时,请留空(按Enter键)。MCP SSH代理以非交互式方式运行,无法处理受密码保护的密钥。
Enter passphrase (empty for no passphrase): [Press Enter]
Enter same passphrase again: [Press Enter]
这将创建两个文件:
~/.ssh/id_ed25519(私钥) - 请妥善保管!~/.ssh/id_ed25519.pub(公钥) - 将其复制到服务器。将您的公钥复制到远程服务器的authorized_keys文件中:
# 方法1:使用ssh-copy-id(最简单)
ssh-copy-id user@hostname
# 方法2:手动复制
cat ~/.ssh/id_ed25519.pub | ssh user@hostname "mkdir -p ~/.ssh && cat >> ~/.ssh/authorized_keys"
# 方法3:手动复制粘贴
cat ~/.ssh/id_ed25519.pub
# 然后SSH到服务器并粘贴到~/.ssh/authorized_keys
要在SSH服务器上启用安全的仅密钥认证,请编辑/etc/ssh/sshd_config:
# 编辑SSH守护进程配置
sudo nano /etc/ssh/sshd_config
添加或修改以下设置:
# 启用公钥认证
PubkeyAuthentication yes
AuthorizedKeysFile .ssh/authorized_keys
# 禁用密码认证(安全最佳实践)
PasswordAuthentication no
ChallengeResponseAuthentication no
UsePAM no
# 根用户登录选项(选择一个):
# 选项1:仅允许使用SSH密钥进行根用户登录(推荐用于管理任务)
PermitRootLogin prohibit-password
# 选项2:完全禁用根用户登录(最安全,但需要sudo访问权限)
# PermitRootLogin no
# 可选:将SSH访问限制为特定用户
AllowUsers deploy root admin
# 可选:更改默认端口以提高安全性
Port 22022
编辑完成后,重启SSH服务:
# 在Ubuntu/Debian上
sudo systemctl restart ssh
# 在CentOS/RHEL/Fedora上
sudo systemctl restart sshd
# 在macOS上
sudo launchctl unload /System/Library/LaunchDaemons/ssh.plist
sudo launchctl load /System/Library/LaunchDaemons/ssh.plist
SSH对文件权限要求非常严格。请正确设置权限: 在本地机器上:
chmod 700 ~/.ssh
chmod 600 ~/.ssh/id_ed25519
chmod 644 ~/.ssh/id_ed25519.pub
chmod 644 ~/.ssh/config
chmod 644 ~/.ssh/known_hosts
在远程服务器上:
chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys
在使用MCP SSH代理之前,请测试您的连接:
# 测试连接
ssh -i ~/.ssh/id_ed25519 user@hostname
# 使用详细输出进行调试
ssh -v -i ~/.ssh/id_ed25519 user@hostname
# 测试特定配置
ssh -F ~/.ssh/config hostname
您可以为不同的服务器创建不同的密钥:
# 创建特定的密钥
ssh-keygen -t ed25519 -f ~/.ssh/id_production -C "production-server"
ssh-keygen -t ed25519 -f ~/.ssh/id_staging -C "staging-server"
然后在~/.ssh/config中进行配置:
Host production
Hostname prod.example.com
User deploy
IdentityFile ~/.ssh/id_production
IdentitiesOnly yes
Host staging
Hostname staging.example.com
User deploy
IdentityFile ~/.ssh/id_staging
IdentitiesOnly yes
AllowUsers将SSH访问限制为特定用户。PermitRootLogin prohibit-password - 仅允许使用SSH密钥进行根用户访问(推荐用于管理任务)。PermitRootLogin no - 完全禁用根用户登录(最安全,但需要sudo访问权限)。mcp-ssh/
├── server-simple.mjs # 主要的MCP服务器实现
├── package.json # 依赖项和脚本
├── README.md # 文档
├── LICENSE # MIT许可证
├── CHANGELOG.md # 发布历史
├── PUBLISHING.md # 发布说明
├── start.sh # 开发启动脚本
├── start-silent.sh # 静默启动脚本
├── doc/
│ ├── example.png # 使用示例截图
│ └── Claude.png # Claude Desktop集成示例
├── src/ # TypeScript源文件(开发用)
│ ├── ssh-client.ts # SSH操作实现
│ ├── ssh-config-parser.ts # SSH配置解析
│ └── types.ts # 类型定义
└── tsconfig.json # TypeScript配置
本项目采用MIT许可证,详情请参阅LICENSE文件。
本项目由 aionda.com 维护,通过模型上下文协议(MCP)为AI助手和SSH基础设施之间提供了可靠的桥梁。
欢迎贡献代码!请随时提交拉取请求。