SSH连接服务器

一个基于TypeScript实现的SSH连接服务器,提供远程命令执行、文件传输和系统信息获取功能,并与VS Code Copilot集成以提升远程开发效率。

  • by SuperPyonchiX
  • JavaScript
  • 本地部署
  • 更新于
在 GitHub 查看 superpyonchix/ssh_mcp_server

使用说明

SSH MCP服务器(TypeScript)

SSH提供连接功能MCP(Model Context Protocol)服务器TypeScript实施。Ubuntu虚拟机SSH来修改标记元素的显示属性VS Code Copilot中描述的场景,使用以下步骤创建明细表,以便在概念设计中分析体量的体积。

📁 项目结构

ssh_mcp_server/
├── package.json            # プロジェクト設定とビルド設定
├── package-lock.json       # 依存関係ロックファイル
├── tsconfig.json           # TypeScript設定
├── build/                  # コンパイル済みJavaScriptファイル
│   ├── index.js
│   ├── index.js.map
│   ├── index.d.ts
│   └── index.d.ts.map
├── src/                    # TypeScriptソースコード
│   └── index.ts            # メインサーバー実装
├── test_tools_list.js      # ツールリストテスト
├── README.md               # このファイル
└── .gitignore              # Git除外設定

机能

  • SSH接続管理:支持密码和私钥身份验证
  • 执行远程命令:也可以指定工作目录
  • 文件传输: SFTP通过上传下载
  • 系统信息获取:获取有关连接的详细信息
  • 环境变量支持:安全管理连接信息
  • VS Code连携: GitHub Copilot完全集成
  • 详细日志输出:便于调试的日志功能

前提条件

  • Node.js: 18.0.0 以上
  • npm: Node.js附带的包管理器
  • TypeScript:开发时使用(包括在devDependendencies中)

Node.js安装:

# 最新LTS版のインストール
winget install OpenJS.NodeJS.LTS

快速启动

1.设置依赖关系

npm install

此命令执行以下操作:

  • 必需的Node.js安装软件包
  • TypeScript设置相关开发依赖关系

2.构建项目

npm run build

TypeScript文件JavaScript将条目添加到文档注册表build/输出到目录。

3. SSH设置连接信息

设置环境变量SSH管理连接信息:

# Windows (コマンドプロンプト)
set UBUNTU_SSH_HOST=192.168.56.103
set UBUNTU_SSH_PORT=22
set UBUNTU_SSH_USERNAME=your_username
set UBUNTU_SSH_PASSWORD=your_password

# Windows (PowerShell)
$env:UBUNTU_SSH_HOST="192.168.56.103"
$env:UBUNTU_SSH_PORT="22"
$env:UBUNTU_SSH_USERNAME="your_username"
$env:UBUNTU_SSH_PASSWORD="your_password"

# Linux/macOS
export UBUNTU_SSH_HOST=192.168.56.103
export UBUNTU_SSH_PORT=22
export UBUNTU_SSH_USERNAME=your_username
export UBUNTU_SSH_PASSWORD=your_password

4.启动服务器

# ビルド済みファイルから実行(推奨)
npm start

# または直接実行
node build/index.js

VS Code / Claude Desktop 中的设置

VS Code MCP设定

VS Code单击功能区上Copilot进行动态观察时的轴心点mcp.json请在文件中添加以下设置:

文件位置:

  • 视窗: %APPDATA%\Code - Insiders\User\mcp.json (Insiders版本)或 %APPDATA%\Code\User\mcp.json (安定版)
  • macOS: ~/Library/Application Support/Code - Insiders/User/mcp.json 在工作空间的边缘 ~/Library/Application Support/Code/User/mcp.json
  • Linux: ~/.config/Code - Insiders/User/mcp.json 在工作空间的边缘 ~/.config/Code/User/mcp.json
{
  "servers": {
    "ssh-mcp-server": {
      "type": "stdio",
      "command": "node",
      "args": ["path/to/ssh_mcp_server/build/index.js"],
      "env": {
        "UBUNTU_SSH_HOST": "192.168.56.103",
        "UBUNTU_SSH_PORT": "22", 
        "UBUNTU_SSH_USERNAME": "your_username",
        "UBUNTU_SSH_PASSWORD": "your_password"
      }
    }
  }
}

Claude Desktop设定

Claude Desktop使用时,在配置文件中添加以下内容:

文件位置:

  • 视窗: %APPDATA%\Claude\claude_desktop_config.json
  • macOS: ~/Library/Application Support/Claude/claude_desktop_config.json
{
  "mcpServers": {
    "ssh-server": {
      "command": "node",
      "args": ["path/to/ssh_mcp_server/build/index.js"],
      "env": {
        "UBUNTU_SSH_HOST": "192.168.56.103",
        "UBUNTU_SSH_PORT": "22",
        "UBUNTU_SSH_USERNAME": "your_username",
        "UBUNTU_SSH_PASSWORD": "your_password"
      }
    }
  }
}

按环境变量设置(建议)

考虑到安全性,还可以在系统环境变量中设置:

{
  "servers": {
    "ssh-mcp-server": {
      "type": "stdio",
      "command": "node",
      "args": ["path/to/ssh_mcp_server/build/index.js"]
    }
  }
}

使用私钥身份验证:

# パスワードの代わりに秘密鍵を使用
export UBUNTU_SSH_PRIVATE_KEY_PATH="/path/to/your/private/key"
export UBUNTU_SSH_PRIVATE_KEY_PASSPHRASE="your_passphrase_if_needed"

设置要点

  1. 路径设置: args请根据您的环境更改路径
  2. 环境变数: SSH连接信息在设定文件内或环境变量中指定
  3. 安全性:密码不在配置文件中,建议使用环境变量

VS Code在中使用

  1. VS Code(GitHub Copilot有效)を起动
  2. Copilot聊天请求:
    • "Ubuntu来定义自定义外观。“
    • "docker 请执行命令“
    • “上载文件并运行构建”

MCP自动调用服务器Ubuntu VM执行上述操作。

可用的MCP工具

|工具名称|说明|主要参数| |---------|------|----------------| | connect_ssh | SSH接続を确立|host, username, password/private_key | | execute_命令 执行远程命令command, cwd(工作目录) | 上传文件 上传文件local_path, remote_path | | 下载文件 下载文件remote_path, local_path | | disconnect_ssh | SSH断开连接|无| | get_system_info |获取系统信息|无|

工具详细信息

connect_ssh

Ubuntu VM在…之上SSH建立连接。如果省略了参数,则从环境变量中自动获取。

参数:

  • host (可选):SSH目标主机(环境变量: UBUNTU_SSH_HOST)
  • username (可选):SSH用户名(环境变量: UBUNTU_SSH_USERNAME)
  • port (可选):SSH端口(环境变量: UBUNTU_SSH_PORT、默认值:22)
  • password (可选):密码(环境变量: UBUNTU_SSH_PASSWORD)
  • private_key (可选):私钥内容(环境变量: UBUNTU_SSH_PRIVATE_KEY_PATH)
  • private_key_passphrase (可选):私钥密码短语(环境变量: UBUNTU_SSH_PRIVATE_KEY_PASSPHRASE)

execute_命令

已连接Ubuntu VM执行命令以获取结果。获取所有标准输出、标准错误和结束代码。

参数:

  • command (必需):要执行的壳命令
  • cwd (可选):运行命令的工作目录

使用例:

  • 系统信息获取: uname -a
  • Docker容器运行: docker run --rm ubuntu echo "Hello World"
  • 文件操作: ls -la /home/user

上传文件

打开本地文件Ubuntu VM中所述修改相应参数的值。如果目录不存在,则自动创建。

参数:

  • local_path (必需):本地文件路径
  • remote_path (必需):要上传的VM文件路径

下载文件

Ubuntu VM之后由应用程序进行调用。如果本地目录不存在,则自动创建。

参数:

  • remote_path (必需):下载源的VM文件路径
  • local_path (必需):目标本地文件路径

get_system_info

Ubuntu VM的明细栏样式中定义的设置。

取得情报:

  • 系统信息
  • OS 发布信息
  • 磁盘使用量
  • 内存使用量
  • CPU情报
  • 网络接口
  • 运行进程列表
  • 系统运行时间

disconnect_ssh

SSH断开连接并释放资源。建议您在工作完成后务必执行。

使用方法

这个服务器Model Context Protocol进行动态观察时的轴心点。MCP客户端(例如:Claude Desktop、VS Code),模板名称将采用不同的格式。

基本使用流程

  1. connect_ssh 单击功能区上SSH建立连接
  2. execute_command 执行远程命令
  3. 根据需要 upload_file / download_file 文件传输
  4. get_system_info 获取系统信息
  5. 作业完了后、disconnect_ssh 断开连接

使用示例:Docker构建执行

1. connect_ssh() でSSH接続
2. execute_command("docker run --rm -v /home/kosuke/work/TCPTestApp:/workspace -w /workspace ubuntu-dev bash -c '/workspace/Build.sh'")
3. disconnect_ssh() で切断

示例:文件传输和脚本执行

1. connect_ssh() でSSH接続
2. upload_file("local_script.sh", "/tmp/script.sh")
3. execute_command("chmod +x /tmp/script.sh && /tmp/script.sh", cwd="/tmp")
4. download_file("/tmp/output.txt", "result.txt")
5. disconnect_ssh() で切断

实际的Copilot使用示例

按以下要求MCP自动调用服务器:

  • 系统信息确认:请连接Ubuntu获取系统信息
  • Docker実行:在Ubuntu上运行以下命令:docker run --rm ubuntu echo 'Hello World'"
  • 文件管理:“本地config.json打开VM的,之home/user/请上传到“
  • 远程开发:“请连接到虚拟机构建项目并下载结果”

开发调试

在开发模式下运行

# TypeScriptファイルを監視して自動コンパイル
npm run dev

# または手動でのビルドと実行
npm run build
npm start

手动MCP服务器测试

# サーバーを直接起動
npm start

# または
node build/index.js

# ツールリストの確認
node test_tools_list.js

设定検证

测试当前设置和连接是否正常:

# ツールリストの動作確認
node test_tools_list.js

检查日志输出

VS Code Copilot运行时: MCP服务器日志VS Code的输出面板中可以确认:

  1. VS Code单击功能区上 表示 → 出力 的双曲正切值
  2. 从下拉列表中MCP选择服务器

在命令行上运行时: 在标准输出中显示详细的日志。

故障排除

常见问题

  1. 连接错误:确认环境变量的设置
  2. 验证错误:确认密码或私钥设置
  3. 构建错误: npm run build 重新运行
  4. 缺少命令: node build/index.js 确认路径

SSH连接问题

SSH连接错误

  • Ubuntu VM单击功能区上SSH确认服务器是否已启动: sudo systemctl status ssh
  • 检查防火墙设置: sudo ufw status
  • VM的网络设置(端口转发等)的确认

验证错误

  • 复查环境变量值
  • 确认是否启用了密码验证: /etc/ssh/sshd_config
  • 确认私钥权限: chmod 600 ~/.ssh/id_rsa

VS Code协作问题

MCP配置错误

  • mcp.json文件位置和JSON检查语法
  • GitHub Copilot确认是否有效
  • VS Code 重新启动以反映设置

路径相关错误

  • mcp.json的,之args验证路径是否正确
  • 建议使用绝对路径而不是相对路径

调试模式

单击功能区上的src/index.ts中描述的场景,使用以下步骤创建明细表,以便在概念设计中分析体量的体积

// デバッグレベルのログを有効化
console.log("詳細なデバッグ情報...");

日志确认方法

  1. VS Code在动态输入提示中单击MCP检查服务器日志
  2. 在命令行中直接运行服务器以获取调试信息
  3. SSH如果需要详细的连接日志,请使用服务器代码调整日志级别

安全注意事项

  • SSH请安全管理连接凭据
  • 建议使用环境变量管理密码
  • SSH连接仅在可信网络上使用
  • 请注意私钥文件的权限设置(通常为600)
  • 在生产环境中,建议使用环境变量管理凭据

系统要求

本地环境

  • Node.js: 18.0.0 以上
  • npm: Node.js附带的包管理器
  • VS代码: GitHub Copilot扩张机能が有效
  • 操作系统:Windows 10/11、macOS 10.15+、Linux(Ubuntu 18.04+)

Ubuntu VM环境

  • 操作系统: Ubuntu 18.04 LTS 以上
  • 安全外壳协议:OpenSSH服务器(sudo apt install openssh-server)
  • 网络: SSH可连接的设置(端口22或自定义端口)
  • 码头工人:根据需要(sudo apt install docker.io)

技术仕样

  • 程序设计语言:TypeScript 5.x
  • 运行时间:Node.js 18.0.0+
  • MCP框架结构:@modelcontextprotocol/sdk
  • SSH/SFTP程序库:ssh2
  • 构建工具:TypeScript编译器(tsc)
  • 包管理器:npm

依存关系

本体依存関係:

  • @modelcontextprotocol/sdk - MCP(Model Context Protocol)服务器SDK
  • ssh2 - SSH/SFTP客户机
  • zod -架构验证

开発依存关系:

  • typescript - TypeScript 编译程序
  • @types/node - Node.js型定义

开发人员信息

项目结构特征

  • TypeScript:模具安全性和IDE支援事业
  • MCP-SDK: Model Context Protocolの标准実装
  • 简单配置:以最低的依赖关系实现高功能性

自定义

要自定义项目,请编辑以下文件:

  • src/index.ts:主服务器逻辑
  • package.json:项目设置和相关性
  • tsconfig.json: TypeScript 编译设置

许可证

MIT许可证

貢献

Issue报告和Pull Request欢迎光临。在有功能追加或改善提案情况下GitHub的,之Issue来定义自定义外观。

参与开发

  1. 分叉此存储库
  2. 创建功能分支(git checkout -b feature/amazing-feature)
  3. 提交更改(git commit -m 'Add amazing feature')
  4. 推到分支(git push origin feature/amazing-feature)
  5. Pull Request创建