Files
shopdb-flask/.claude/setup/setup-vm-ssh.md
Proudlock bd48814021 Reorganize repository structure and clean up documentation
Clean up and organize the flask-shopdb repository for better
maintainability and discoverability:

## Changes

- Update .gitignore for build artifacts (publish/, data/, 122M total)
- Reorganize .claude/ into 6 subdirectories with README navigation
- Consolidate overlapping MCP setup guides into MCP-QUICK-START.md
- Move deployment docs from root to docs/deployment/
- Archive dated status reports to .claude/archived/
- Delete temporary files (logs, backups, empty reports, ~50K)

## New Structure

.claude/ organized into:
- setup/ - MCP, VM, Hyper-V, GitHub setup guides + scripts (17 files)
- plans/ - Feature plans and protocols (5 files)
- maintenance/ - Deployment checklists and reports (4 files)
- archived/ - Historical documentation (9 files)
- skills/ - Claude Code automation (5 files)
- workflows/ - Security audit workflow (1 file)

docs/deployment/ created with 6 deployment guides:
- LOCAL-DEV-SETUP.md, DOCKER-SETUP.md, DOCKER-PREBUILT-APPROACH.md
- PRODUCTION-READINESS.md, DEPLOY-TO-VM.md, README.md

Root directory cleaned to essential docs only:
- CLAUDE.md, README.md, CONTRIBUTING.md, CHANGELOG.md

Benefits:
- Clear navigation via README.md in each subdirectory
- No duplicate/overlapping documentation
- Large artifacts properly gitignored (won't bloat repository)
- Historical context preserved in archived/

See .claude/CLEANUP-SUMMARY.md for complete details.

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-09-11 15:45:05 -04:00

268 lines
5.7 KiB
Markdown

# Set Up SSH Access to VM for Claude Code
Guide to configure SSH MCP so Claude can interact with the Windows 11 test VM.
---
## Step 1: Configure VM (Run as Administrator in VM)
```powershell
# Install OpenSSH Server
Add-WindowsCapability -Online -Name OpenSSH.Server~~~~0.0.1.0
# Start SSH service
Start-Service sshd
Set-Service -Name sshd -StartupType 'Automatic'
# Allow SSH through firewall
New-NetFirewallRule -Name sshd -DisplayName 'OpenSSH Server (sshd)' -Enabled True -Direction Inbound -Protocol TCP -Action Allow -LocalPort 22
# Verify SSH is listening
netstat -ano | findstr :22
# Should show: TCP 0.0.0.0:22 ... LISTENING
# Set password for local user (replace "ShopFloor" with actual username)
net user ShopFloor YourPassword123
```
---
## Step 2: Test SSH from Host
```bash
# From host PC
ssh ShopFloor@192.168.100.10
# Should connect and show Windows command prompt
# If works, type 'exit' to disconnect
```
---
## Step 3: Install SSH MCP Server
```bash
# On host PC
npm install -g ssh-mcp
# Verify installation
npm list -g ssh-mcp
```
---
## Step 4: Add to Claude Code Config
Edit `.claude/mcp-servers.json`:
```json
{
"mcpServers": {
"gortex": {
"command": "C:\\Users\\270015376\\Documents\\gortex.exe",
"args": ["mcp"],
"cwd": "C:\\Users\\270015376\\Documents\\github\\flask-shopdb"
},
"mysql": {
"command": "npx",
"args": ["-y", "@benborla29/mcp-server-mysql", "mysql://shopdb:shopdb-dev-password@127.0.0.1:3306/shopdb_flask"]
},
"browser": {
"command": "npx",
"args": ["-y", "@agent-infra/mcp-server-browser"]
},
"vm": {
"command": "npx",
"args": [
"-y",
"ssh-mcp",
"--host", "192.168.100.10",
"--user", "ShopFloor",
"--password", "YourPassword123"
]
}
}
}
```
**Note:** Replace "ShopFloor" and "YourPassword123" with actual VM credentials.
---
## Step 5: Restart Claude Code
Close and reopen Claude Code completely to load the new MCP server.
---
## Step 6: Verify SSH MCP Works
In Claude Code conversation:
```
You: "Run 'hostname' on the VM"
Claude: [Calls mcp__vm__exec]
Claude: "VM hostname: DESKTOP-ABC123"
```
---
## What Claude Can Do with SSH MCP:
### Execute Commands:
```
"Check if agent service is running on VM"
"Get the VM's IP configuration"
"List running processes on VM"
"Read agent logs from VM"
```
### File Operations:
```
"Copy shopdbagent.exe to VM at C:\Temp"
"Read the agent config file from VM"
"Upload the latest build to VM"
"Download agent logs from VM"
```
### Agent Testing:
```
"Install the agent on VM"
"Start/stop the agent service"
"Check if tray is running"
"Tail the agent log file"
"Verify agent is connecting to http://192.168.100.1:5000"
```
### Integration Testing:
```
"Create a fleet alert and verify it appears on VM"
"Submit operator report from VM and check database"
"Test endpoint heartbeat from VM"
"Run script on VM and check results in database"
```
---
## Security Notes
### Password in Config:
- Config file contains plain-text password
- Only for test VM on internal network
- VM has no internet access (internal network only)
- Not a production concern
### Better: Use SSH Key (Optional)
**Generate SSH key:**
```bash
ssh-keygen -t rsa -f ~/.ssh/vm_key
```
**Copy public key to VM:**
```powershell
# In VM, create .ssh directory
mkdir C:\Users\ShopFloor\.ssh
# Copy contents of ~/.ssh/vm_key.pub to:
# C:\Users\ShopFloor\.ssh\authorized_keys
```
**Update .mcp.json:**
```json
"vm": {
"command": "npx",
"args": [
"-y",
"ssh-mcp",
"--host", "192.168.100.10",
"--user", "ShopFloor",
"--key", "C:\\Users\\270015376\\.ssh\\vm_key"
]
}
```
---
## Troubleshooting
### SSH Connection Refused:
```bash
# Check SSH service on VM
ssh ShopFloor@192.168.100.10
# If fails, verify service running:
# In VM: Get-Service sshd
```
### Authentication Failed:
```bash
# Verify password
# In VM: net user ShopFloor NewPassword123
```
### Port 22 Blocked:
```powershell
# In VM, check firewall rule exists
Get-NetFirewallRule -Name sshd
```
### MCP Server Not Loading:
```bash
# Verify ssh-mcp installed
npm list -g ssh-mcp
# Test manually
npx -y ssh-mcp --host 192.168.100.10 --user ShopFloor --password Test123
```
---
## Example Test Workflow
### Full Agent Deployment Test:
```
You: "Deploy and test the agent on the VM"
Claude:
1. [Builds agent] dotnet publish...
2. [SSH: Upload] Copying shopdbagent.exe to VM...
3. [SSH: Install] Running installer on VM...
4. [SSH: Configure] Setting API endpoint to http://192.168.100.1:5000...
5. [SSH: Start] Starting ShopDBEndpointAgent service...
6. [SSH: Verify] Checking service status... Running
7. [SSH: Logs] Reading agent.log... "Connected to API successfully"
8. [MySQL: Create alert] Inserting test fleet alert...
9. [Wait 5s]
10. [SSH: Check tray] Get-Process shopdb-endpoint-tray... Running
11. [SSH: Screenshot] Capturing tray notification...
12. ✅ Complete! Agent installed, connected, and received fleet alert.
```
---
## VM Requirements Summary:
| Requirement | Status | Command to Check |
|-------------|--------|------------------|
| OpenSSH Server installed | ⏳ | `Get-WindowsCapability -Online -Name OpenSSH.Server*` |
| SSH service running | ⏳ | `Get-Service sshd` |
| Port 22 open in firewall | ⏳ | `Get-NetFirewallRule -Name sshd` |
| User has password set | ⏳ | `net user ShopFloor` |
| Network connectivity | ✅ | `arp -a` shows 192.168.100.10 |
| Internal network configured | ✅ | VM has 192.168.100.10 |
---
## Next Steps:
1. Run Step 1 commands in VM (as Administrator)
2. Test SSH connection from host (Step 2)
3. Install ssh-mcp on host (Step 3)
4. Update .claude/mcp-servers.json (Step 4)
5. Restart Claude Code (Step 5)
6. Test with simple command (Step 6)
**Ready to proceed?**