README-id.md•5.87 kB
# MCP SSH Server
<div align="center">
<a href="README.md">🇺🇸 English</a> | <a href="README-id.md">🇮🇩 Bahasa Indonesia</a>
</div>
### 🚀 Gambaran Umum
MCP SSH Server adalah server Model Context Protocol (MCP) yang powerful untuk operasi SSH, transfer file, dan manajemen server remote. Server ini menyediakan fungsionalitas SSH yang komprehensif termasuk koneksi aman, operasi file, sesi shell interaktif, manajemen kredensial, dan kemampuan deployment Docker.
### ✨ Fitur
- **🔐 Koneksi SSH Aman**: Dukungan untuk autentikasi password dan SSH key
- **📁 Operasi File**: Salin file antara server lokal dan remote dengan pembuatan direktori
- **💻 Sesi Shell Interaktif**: Emulasi terminal penuh dengan dukungan PTY
- **🔑 Manajemen Kredensial**: Simpan dan gunakan kembali kredensial SSH dengan aman
- **🐳 Integrasi Docker**: Deploy dan kelola container Docker secara remote
- **📂 Konteks Working Directory**: Pertahankan status working directory per koneksi
- **🔍 Operasi Sistem File**: List file, dapatkan info file, dan navigasi direktori
- **⚡ Connection Pooling**: Manajemen koneksi yang efisien dan dapat digunakan kembali
### 📋 Prasyarat
- Node.js 18+
- TypeScript 5.3+
- Akses SSH ke server target
- Claude Desktop atau klien MCP yang kompatibel
### 🛠️ Instalasi
1. **Clone repository:**
```bash
git clone <repository-url>
cd mcp-ssh-server
```
2. **Install dependencies:**
```bash
npm install
```
3. **Build project:**
```bash
npm run build
```
4. **Konfigurasi Claude Desktop:**
Tambahkan ke file konfigurasi Claude Desktop:
**Windows:** `%APPDATA%/Claude/claude_desktop_config.json`
```json
{
"mcpServers": {
"ssh-server": {
"command": "node",
"args": ["C:/path/to/mcp-ssh-server/dist/index.js"],
"env": {}
}
}
}
```
**macOS:** `~/Library/Application Support/Claude/claude_desktop_config.json`
```json
{
"mcpServers": {
"ssh-server": {
"command": "node",
"args": ["/Users/username/path/to/mcp-ssh-server/dist/index.js"],
"env": {}
}
}
}
```
### 🎯 Tool yang Tersedia
#### Manajemen Koneksi
- `ssh_connect` - Buat koneksi SSH
- `ssh_disconnect` - Tutup koneksi SSH
- `ssh_connect_with_credential` - Koneksi menggunakan kredensial tersimpan
#### Eksekusi Perintah
- `ssh_execute` - Eksekusi perintah di server remote
- `ssh_start_interactive_shell` - Mulai sesi shell interaktif
- `ssh_send_input` - Kirim input ke shell interaktif
- `ssh_read_output` - Baca output dari shell interaktif
- `ssh_close_interactive_shell` - Tutup sesi shell interaktif
#### Operasi File
- `ssh_copy_file` - Salin file antar server
- `ssh_list_files` - List isi direktori
- `ssh_file_info` - Dapatkan informasi file
#### Manajemen Kredensial
- `ssh_save_credential` - Simpan kredensial SSH
- `ssh_list_credentials` - List kredensial tersimpan
- `ssh_delete_credential` - Hapus kredensial tersimpan
#### Working Directory
- `ssh_set_working_directory` - Set working directory saat ini
- `ssh_get_working_directory` - Dapatkan working directory saat ini
#### Operasi Docker
- `ssh_docker_deploy` - Deploy container Docker
- `ssh_docker_status` - Cek status container Docker
### 📖 Contoh Penggunaan
#### Koneksi SSH Dasar
```json
{
"tool": "ssh_connect",
"arguments": {
"host": "192.168.1.100",
"username": "user",
"password": "password",
"connectionId": "server1"
}
}
```
#### Autentikasi SSH Key
```json
{
"tool": "ssh_connect",
"arguments": {
"host": "192.168.1.100",
"username": "user",
"privateKeyPath": "/path/to/private/key",
"connectionId": "server1"
}
}
```
#### Transfer File (Lokal ke Remote)
```json
{
"tool": "ssh_copy_file",
"arguments": {
"sourceConnectionId": "local",
"sourcePath": "/local/file.txt",
"targetConnectionId": "server1",
"targetPath": "/remote/file.txt"
}
}
```
#### Eksekusi Perintah
```json
{
"tool": "ssh_execute",
"arguments": {
"connectionId": "server1",
"command": "ls -la /home/user"
}
}
```
#### Deployment Docker
```json
{
"tool": "ssh_docker_deploy",
"arguments": {
"connectionId": "server1",
"workingDirectory": "/app",
"deploymentType": "compose"
}
}
```
#### Simpan Kredensial
```json
{
"tool": "ssh_save_credential",
"arguments": {
"credentialId": "my-server",
"host": "192.168.1.100",
"username": "user",
"privateKeyPath": "/path/to/key"
}
}
```
### 🔧 Development
```bash
# Mode development
npm run dev
# Type checking
npm run type-check
# Build
npm run build
# Start production
npm start
```
### 🔒 Pertimbangan Keamanan
- Simpan private key dengan aman menggunakan permission file yang tepat (600)
- Gunakan autentikasi SSH key daripada password jika memungkinkan
- Pertimbangkan menggunakan SSH agent forwarding untuk keamanan tambahan
- Server mempertahankan connection pool - pastikan cleanup yang tepat saat shutdown
### 🐛 Troubleshooting
**Masalah Integrasi Claude Desktop:**
1. Verifikasi path absolut di `claude_desktop_config.json` sudah benar
2. Pastikan server berhasil di-build (`npm run build`)
3. Cek bahwa `dist/index.js` ada di direktori project
4. Restart Claude Desktop sepenuhnya
**Kegagalan Koneksi SSH:**
1. Verifikasi SSH server dapat diakses dari mesin Anda
2. Test koneksi SSH secara manual: `ssh username@hostname`
3. Cek permission SSH key: `chmod 600 ~/.ssh/id_rsa`
4. Pastikan SSH key dalam format yang benar (OpenSSH)
### 📄 Lisensi
MIT License - lihat file LICENSE untuk detail.
### 🤝 Kontribusi
Kontribusi sangat diterima! Silakan submit Pull Request.
---
<div align="center">
<p>Dibuat dengan ❤️ untuk operasi SSH yang seamless</p>
<p><a href="README.md">🇺🇸 Read in English</a></p>
</div>