一个用于管理和控制SSH连接的模型上下文协议(MCP)服务器。该服务器与Claude Desktop和其他兼容MCP的客户端无缝集成,提供AI驱动的SSH操作。
此MCP服务器通过干净、标准化的接口提供SSH操作,可以被兼容MCP的语言模型如Claude Desktop使用。服务器会自动从你的~/.ssh/config和~/.ssh/known_hosts文件中发现SSH主机,并使用原生SSH工具执行命令以确保最大可靠性。
最简单的安装MCP SSH Agent的方法是通过桌面扩展(.dxt)格式:
mcp-ssh-*.dxt文件。.dxt文件将其安装到Claude Desktop中。npx @aiondadotcom/mcp-ssh
要使用手动配置将此MCP服务器与Claude Desktop结合使用,请在你的MCP设置文件中添加以下内容:
在macOS上:~/Library/Application Support/Claude/claude_desktop_config.json
在Windows上:%APPDATA%/Claude/claude_desktop_config.json
{
"mcpServers": {
"mcp-ssh": {
"command": "npx",
"args": ["@aiondadotcom/mcp-ssh"]
}
}
}
添加此配置后,重启Claude Desktop。SSH工具将在你与Claude的对话中可用。
npm install -g @aiondadotcom/mcp-ssh
git clone https://github.com/aiondadotcom/mcp-ssh.git
cd mcp-ssh
npm install
npm start

上图显示了MCP SSH Agent的实际运行情况,展示了它如何与兼容MCP的客户端集成,提供无缝的SSH操作。

此截图演示了MCP SSH Agent与Claude的集成,展示了AI助手如何直接管理SSH连接并通过MCP协议执行远程命令。
ssh/scp命令而不是JavaScript SSH库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"]
}
}
}
ssh和scp命令可用)~/.ssh/config和~/.ssh/known_hosts)配置完成后,你可以请求Claude帮助你进行SSH操作,例如:
Claude将使用MCP SSH工具安全高效地执行这些操作。
代理作为Model Context Protocol服务器通过STDIO运行。通过npm安装后,可以直接使用:
# 通过npx运行(推荐)
npx @aiondadotcom/mcp-ssh
# 或者如果全局安装
mcp-ssh
# 开发使用 - 带调试输出
npm start
服务器通过STDIO上的干净JSON进行通信,使其非常适合像Claude Desktop这样的MCP客户端。
MCP_SILENT=true - 禁用调试输出(当作为MCP服务器使用时自动设置)代理读取标准SSH配置文件:
~/.ssh/config - SSH客户端配置(支持Include指令)~/.ssh/known_hosts - 已知主机密钥确保你的SSH密钥正确配置并可通过SSH代理或密钥文件访问。
MCP SSH Agent完全支持SSH Include指令来组织你的配置跨越多个文件。但是,需要注意一个重要的SSH错误:
⚠️ SSH Include指令错误警告
SSH有一个配置解析错误,其中Include语句必须放在你的~/.ssh/config文件的开头才能正常工作。如果放在末尾,SSH会读取它们但不会正确应用包含的配置。
✅ 正确放置(在开头):
# ~/.ssh/config
Include ~/.ssh/config.d/*
Include ~/.ssh/work-hosts
# 全局设置
ServerAliveInterval 55
# 主机定义
Host myserver
HostName example.com
❌ 错误放置(在末尾) - 不会工作:
# ~/.ssh/config
# 全局设置
ServerAliveInterval 55
# 主机定义
Host myserver
HostName example.com
# 这些Include语句由于SSH错误而无法正常工作:
Include ~/.ssh/config.d/*
Include ~/.ssh/work-hosts
MCP SSH Agent无论其在文件中的位置如何都会正确处理Include指令,因此即使SSH本身有问题,你也会得到完整的主机发现。
这是一个示例SSH配置文件,展示了各种连接场景,包括Include指令:
# Include指令必须放在开头,因为SSH错误
Include ~/.ssh/config.d/*
Include ~/.ssh/work-servers
# 全局设置 - 保持连接活跃
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 Agent会自动发现并使用你的SSH配置:
~/.ssh/config的所有主机都自动可用ssh命令,所以所有配置选项都能工作与Claude Desktop的示例用法:
prod、archive、web1.example.com等ssh和scp已安装并在PATH中~/.ssh/config或~/.ssh/known_hosts中启用调试输出以查看详细的操作日志:
# 启用调试模式
MCP_SILENT=false npx @aiondadotcom/mcp-ssh
为了让MCP SSH Agent正常工作,你需要设置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 Agent不能处理带有密码保护的密钥,因为它是非交互式运行的。
输入密码短语(留空表示无密码短语):[按Enter]
再次输入相同的密码短语:[按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:完全禁用根登录(最安全,但灵活性较低)
# 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 Agent之前测试你的连接:
# 测试连接
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
AllowUsersPermitRootLogin prohibit-password - 允许仅使用SSH密钥的root访问(推荐用于管理任务)PermitRootLogin no - 完全禁用root登录(最安全,但需要sudo访问)对于希望本地构建DXT包的开发者: