vssh 3.7.5__tar.gz → 4.0.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
vssh-4.0.0/PKG-INFO ADDED
@@ -0,0 +1,231 @@
1
+ Metadata-Version: 2.4
2
+ Name: vssh
3
+ Version: 4.0.0
4
+ Summary: [DEPRECATED - Use Go version] Secure SSH/SCP tool
5
+ Author-email: MeshPOP <mpop@mpop.dev>
6
+ License: MIT
7
+ Project-URL: Homepage, https://github.com/meshpop/vssh
8
+ Project-URL: Repository, https://github.com/meshpop/vssh
9
+ Keywords: ssh,scp,tailscale,p2p,vpn,mcp,remote
10
+ Classifier: Development Status :: 4 - Beta
11
+ Classifier: Environment :: Console
12
+ Classifier: Intended Audience :: Developers
13
+ Classifier: Intended Audience :: System Administrators
14
+ Classifier: License :: OSI Approved :: MIT License
15
+ Classifier: Operating System :: POSIX :: Linux
16
+ Classifier: Operating System :: MacOS
17
+ Classifier: Programming Language :: Python :: 3
18
+ Classifier: Topic :: System :: Networking
19
+ Requires-Python: >=3.8
20
+ Description-Content-Type: text/markdown
21
+ License-File: LICENSE
22
+ Dynamic: license-file
23
+
24
+ # vssh
25
+
26
+ > ⚠️ **DEPRECATED**: This Python package is no longer maintained. Please use the Go version instead:
27
+ > ```bash
28
+ > # macOS
29
+ > brew install meshpop/tap/vssh
30
+ >
31
+ > # Linux
32
+ > curl -sSL https://github.com/meshpop/vssh/releases/latest/download/vssh-linux-amd64 -o /usr/local/bin/vssh && chmod +x /usr/local/bin/vssh
33
+ > ```
34
+ > GitHub: https://github.com/meshpop/vssh
35
+
36
+ [![PyPI](https://img.shields.io/pypi/v/vssh)](https://pypi.org/project/vssh/)
37
+ [![Python](https://img.shields.io/pypi/pyversions/vssh)](https://pypi.org/project/vssh/)
38
+ [![License: MIT](https://img.shields.io/badge/license-MIT-blue.svg)](LICENSE)
39
+
40
+ **Fast SSH alternative for server fleets. One shared secret. No key management.**
41
+
42
+ ```bash
43
+ pip install vssh
44
+ ```
45
+
46
+ Pure Python standard library. No external packages. Linux and macOS.
47
+
48
+ ---
49
+
50
+ ## Why vssh?
51
+
52
+ | | SSH | vssh |
53
+ |---|---|---|
54
+ | Authentication | Per-server public keys | One shared HMAC secret |
55
+ | Add a new server | Generate + copy key | Just set the same secret |
56
+ | Revoke access | Remove key from every server | Rotate secret once |
57
+ | Connection setup | Full handshake (~200–400ms) | Token check (~1ms) |
58
+ | Server discovery | IPs / DNS | wire mesh auto-discovery |
59
+ | Fleet health | None | `vssh status` — all nodes |
60
+ | AI management | ✗ | ✓ MCP integration |
61
+
62
+ ---
63
+
64
+ ## How it works
65
+
66
+ Each server runs a persistent daemon on TCP port 48291. Every request includes an HMAC-SHA256 time-based token derived from the shared secret — no public key cryptography, no handshake overhead.
67
+
68
+ ```
69
+ ┌──────────────────────────────────────┐
70
+ │ Fleet │
71
+ │ ┌──────┐ ┌──────┐ ┌──────┐ │
72
+ │ │ web1 │ │ web2 │ │ db1 │ ... │
73
+ │ │:48291│ │:48291│ │:48291│ │
74
+ │ └──┬───┘ └──┬───┘ └──┬───┘ │
75
+ │ └─────────┴─────────┘ │
76
+ │ wire / VPN │
77
+ └─────────────────┬────────────────────┘
78
+ │ TCP :48291
79
+ ┌──────┴──────┐
80
+ │ vssh client │
81
+ └─────────────┘
82
+ ```
83
+
84
+ ---
85
+
86
+ ## Setup
87
+
88
+ ### 1. Install and start the daemon on each server
89
+
90
+ ```bash
91
+ export VSSH_SECRET=your-shared-secret
92
+ vssh server
93
+
94
+ # Or install as a systemd service:
95
+ vssh install
96
+ ```
97
+
98
+ Generate a strong secret:
99
+ ```bash
100
+ python3 -c "import secrets; print(secrets.token_hex(32))"
101
+ ```
102
+
103
+ ### 2. Configure the client
104
+
105
+ With [wire](https://github.com/meshpop/wire) mesh VPN, vssh auto-discovers all nodes — no client config needed.
106
+
107
+ For standalone use, create `~/.vssh/config`:
108
+
109
+ ```ini
110
+ web1=192.168.1.10
111
+ web2=192.168.1.11
112
+ db1=192.168.1.20
113
+ SECRET=your-shared-secret
114
+ ```
115
+
116
+ ---
117
+
118
+ ## CLI Reference
119
+
120
+ ### Fleet status
121
+
122
+ ```bash
123
+ vssh status # All nodes — online/offline, latency
124
+ vssh status --full # Status + disk, memory, load
125
+ ```
126
+
127
+ ### Remote execution
128
+
129
+ ```bash
130
+ vssh web1 "df -h" # Run command
131
+ vssh web1 # Interactive shell
132
+ vssh web1 "df -h && free -h" # Chained commands
133
+ ```
134
+
135
+ ### File transfer
136
+
137
+ ```bash
138
+ vssh put ./nginx.conf web1:/etc/nginx/ # Upload
139
+ vssh get web1:/var/log/app.log ./ # Download
140
+ vssh sync ./config/ web1:/etc/app/ # Sync directory
141
+ vssh rsync <local> <host>:<remote> # Delta sync (changed blocks only)
142
+ ```
143
+
144
+ Auto-compresses text files. Skips upload if remote file is identical (MD5 check).
145
+
146
+ ### RPC — typed JSON data
147
+
148
+ ```bash
149
+ vssh rpc web1 get_disk
150
+ vssh rpc web1 get_processes '{"n": 5, "sort": "mem"}'
151
+ vssh rpc-list web1 # List all available methods
152
+ ```
153
+
154
+ | Method | Returns |
155
+ |---|---|
156
+ | `get_disk` | Disk usage |
157
+ | `get_memory` | Memory stats |
158
+ | `get_load` | Load averages |
159
+ | `get_processes` | Top processes |
160
+ | `get_gpu` | GPU VRAM, utilization, temp |
161
+ | `get_logs` | Log file or journalctl |
162
+ | `list_services` | Running systemd services |
163
+ | `restart_service` | Restart nginx / docker / postgresql / redis |
164
+ | `docker_containers` | Docker container list |
165
+ | `file_read` / `file_write` | File operations |
166
+
167
+ ### Other
168
+
169
+ ```bash
170
+ vssh speed-test web1 # Measure transfer speed
171
+ vssh history [count] [filter] # Command history
172
+ vssh stats [days] # Transfer stats
173
+ vssh pipe-up web1:/path # Pipe stdin to remote file
174
+ vssh pipe-down web1:"cmd" # Pipe remote output to stdout
175
+ ```
176
+
177
+ ---
178
+
179
+ ## Tailscale Failover
180
+
181
+ If a node's primary VPN IP is unreachable, vssh automatically tries the Tailscale IP:
182
+
183
+ 1. Try wire VPN IP (1.5s timeout)
184
+ 2. Fall back to Tailscale IP, cache for 60s
185
+ 3. After 60s: retry wire — if recovered, clear failover
186
+
187
+ The failover map is built automatically by cross-referencing `tailscale status` with wire peers.
188
+
189
+ ---
190
+
191
+ ## AI Management via MCP
192
+
193
+ ```json
194
+ {
195
+ "mcpServers": {
196
+ "vssh": { "command": "vssh-mcp" }
197
+ }
198
+ }
199
+ ```
200
+
201
+ > "Check which servers are online and show me disk usage"
202
+ > "Deploy the new config to all web servers and reload nginx"
203
+ > "What's using the most memory on db1?"
204
+
205
+ ### MCP Tools
206
+
207
+ | Tool | Description |
208
+ |---|---|
209
+ | `vssh_status` | Fleet status — all nodes, latency |
210
+ | `vssh_exec` | Run command on remote server |
211
+ | `vssh_put` / `vssh_get` | Upload / download file |
212
+ | `vssh_sync` | Sync directory |
213
+ | `vssh_speed_test` | Transfer speed |
214
+ | `vssh_tunnel` | Port-forward tunnel |
215
+ | `vssh_keys` | Show secret and server list |
216
+
217
+ ---
218
+
219
+ ## MeshPOP Stack
220
+
221
+ ```
222
+ mpop Fleet orchestration — monitor, manage, automate
223
+ vssh Authenticated transport — remote exec, file transfer ← this
224
+ wire Encrypted mesh VPN — connects all nodes
225
+ ```
226
+
227
+ ---
228
+
229
+ ## License
230
+
231
+ MIT — [MeshPOP](https://github.com/meshpop)
vssh-4.0.0/README.md ADDED
@@ -0,0 +1,208 @@
1
+ # vssh
2
+
3
+ > ⚠️ **DEPRECATED**: This Python package is no longer maintained. Please use the Go version instead:
4
+ > ```bash
5
+ > # macOS
6
+ > brew install meshpop/tap/vssh
7
+ >
8
+ > # Linux
9
+ > curl -sSL https://github.com/meshpop/vssh/releases/latest/download/vssh-linux-amd64 -o /usr/local/bin/vssh && chmod +x /usr/local/bin/vssh
10
+ > ```
11
+ > GitHub: https://github.com/meshpop/vssh
12
+
13
+ [![PyPI](https://img.shields.io/pypi/v/vssh)](https://pypi.org/project/vssh/)
14
+ [![Python](https://img.shields.io/pypi/pyversions/vssh)](https://pypi.org/project/vssh/)
15
+ [![License: MIT](https://img.shields.io/badge/license-MIT-blue.svg)](LICENSE)
16
+
17
+ **Fast SSH alternative for server fleets. One shared secret. No key management.**
18
+
19
+ ```bash
20
+ pip install vssh
21
+ ```
22
+
23
+ Pure Python standard library. No external packages. Linux and macOS.
24
+
25
+ ---
26
+
27
+ ## Why vssh?
28
+
29
+ | | SSH | vssh |
30
+ |---|---|---|
31
+ | Authentication | Per-server public keys | One shared HMAC secret |
32
+ | Add a new server | Generate + copy key | Just set the same secret |
33
+ | Revoke access | Remove key from every server | Rotate secret once |
34
+ | Connection setup | Full handshake (~200–400ms) | Token check (~1ms) |
35
+ | Server discovery | IPs / DNS | wire mesh auto-discovery |
36
+ | Fleet health | None | `vssh status` — all nodes |
37
+ | AI management | ✗ | ✓ MCP integration |
38
+
39
+ ---
40
+
41
+ ## How it works
42
+
43
+ Each server runs a persistent daemon on TCP port 48291. Every request includes an HMAC-SHA256 time-based token derived from the shared secret — no public key cryptography, no handshake overhead.
44
+
45
+ ```
46
+ ┌──────────────────────────────────────┐
47
+ │ Fleet │
48
+ │ ┌──────┐ ┌──────┐ ┌──────┐ │
49
+ │ │ web1 │ │ web2 │ │ db1 │ ... │
50
+ │ │:48291│ │:48291│ │:48291│ │
51
+ │ └──┬───┘ └──┬───┘ └──┬───┘ │
52
+ │ └─────────┴─────────┘ │
53
+ │ wire / VPN │
54
+ └─────────────────┬────────────────────┘
55
+ │ TCP :48291
56
+ ┌──────┴──────┐
57
+ │ vssh client │
58
+ └─────────────┘
59
+ ```
60
+
61
+ ---
62
+
63
+ ## Setup
64
+
65
+ ### 1. Install and start the daemon on each server
66
+
67
+ ```bash
68
+ export VSSH_SECRET=your-shared-secret
69
+ vssh server
70
+
71
+ # Or install as a systemd service:
72
+ vssh install
73
+ ```
74
+
75
+ Generate a strong secret:
76
+ ```bash
77
+ python3 -c "import secrets; print(secrets.token_hex(32))"
78
+ ```
79
+
80
+ ### 2. Configure the client
81
+
82
+ With [wire](https://github.com/meshpop/wire) mesh VPN, vssh auto-discovers all nodes — no client config needed.
83
+
84
+ For standalone use, create `~/.vssh/config`:
85
+
86
+ ```ini
87
+ web1=192.168.1.10
88
+ web2=192.168.1.11
89
+ db1=192.168.1.20
90
+ SECRET=your-shared-secret
91
+ ```
92
+
93
+ ---
94
+
95
+ ## CLI Reference
96
+
97
+ ### Fleet status
98
+
99
+ ```bash
100
+ vssh status # All nodes — online/offline, latency
101
+ vssh status --full # Status + disk, memory, load
102
+ ```
103
+
104
+ ### Remote execution
105
+
106
+ ```bash
107
+ vssh web1 "df -h" # Run command
108
+ vssh web1 # Interactive shell
109
+ vssh web1 "df -h && free -h" # Chained commands
110
+ ```
111
+
112
+ ### File transfer
113
+
114
+ ```bash
115
+ vssh put ./nginx.conf web1:/etc/nginx/ # Upload
116
+ vssh get web1:/var/log/app.log ./ # Download
117
+ vssh sync ./config/ web1:/etc/app/ # Sync directory
118
+ vssh rsync <local> <host>:<remote> # Delta sync (changed blocks only)
119
+ ```
120
+
121
+ Auto-compresses text files. Skips upload if remote file is identical (MD5 check).
122
+
123
+ ### RPC — typed JSON data
124
+
125
+ ```bash
126
+ vssh rpc web1 get_disk
127
+ vssh rpc web1 get_processes '{"n": 5, "sort": "mem"}'
128
+ vssh rpc-list web1 # List all available methods
129
+ ```
130
+
131
+ | Method | Returns |
132
+ |---|---|
133
+ | `get_disk` | Disk usage |
134
+ | `get_memory` | Memory stats |
135
+ | `get_load` | Load averages |
136
+ | `get_processes` | Top processes |
137
+ | `get_gpu` | GPU VRAM, utilization, temp |
138
+ | `get_logs` | Log file or journalctl |
139
+ | `list_services` | Running systemd services |
140
+ | `restart_service` | Restart nginx / docker / postgresql / redis |
141
+ | `docker_containers` | Docker container list |
142
+ | `file_read` / `file_write` | File operations |
143
+
144
+ ### Other
145
+
146
+ ```bash
147
+ vssh speed-test web1 # Measure transfer speed
148
+ vssh history [count] [filter] # Command history
149
+ vssh stats [days] # Transfer stats
150
+ vssh pipe-up web1:/path # Pipe stdin to remote file
151
+ vssh pipe-down web1:"cmd" # Pipe remote output to stdout
152
+ ```
153
+
154
+ ---
155
+
156
+ ## Tailscale Failover
157
+
158
+ If a node's primary VPN IP is unreachable, vssh automatically tries the Tailscale IP:
159
+
160
+ 1. Try wire VPN IP (1.5s timeout)
161
+ 2. Fall back to Tailscale IP, cache for 60s
162
+ 3. After 60s: retry wire — if recovered, clear failover
163
+
164
+ The failover map is built automatically by cross-referencing `tailscale status` with wire peers.
165
+
166
+ ---
167
+
168
+ ## AI Management via MCP
169
+
170
+ ```json
171
+ {
172
+ "mcpServers": {
173
+ "vssh": { "command": "vssh-mcp" }
174
+ }
175
+ }
176
+ ```
177
+
178
+ > "Check which servers are online and show me disk usage"
179
+ > "Deploy the new config to all web servers and reload nginx"
180
+ > "What's using the most memory on db1?"
181
+
182
+ ### MCP Tools
183
+
184
+ | Tool | Description |
185
+ |---|---|
186
+ | `vssh_status` | Fleet status — all nodes, latency |
187
+ | `vssh_exec` | Run command on remote server |
188
+ | `vssh_put` / `vssh_get` | Upload / download file |
189
+ | `vssh_sync` | Sync directory |
190
+ | `vssh_speed_test` | Transfer speed |
191
+ | `vssh_tunnel` | Port-forward tunnel |
192
+ | `vssh_keys` | Show secret and server list |
193
+
194
+ ---
195
+
196
+ ## MeshPOP Stack
197
+
198
+ ```
199
+ mpop Fleet orchestration — monitor, manage, automate
200
+ vssh Authenticated transport — remote exec, file transfer ← this
201
+ wire Encrypted mesh VPN — connects all nodes
202
+ ```
203
+
204
+ ---
205
+
206
+ ## License
207
+
208
+ MIT — [MeshPOP](https://github.com/meshpop)
@@ -4,8 +4,8 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "vssh"
7
- version = "3.7.5"
8
- description = "Secure SSH/SCP tool with Tailscale failover, P2P transport, and MCP server"
7
+ version = "4.0.0"
8
+ description = "[DEPRECATED - Use Go version] Secure SSH/SCP tool"
9
9
  readme = "README.md"
10
10
  license = {text = "MIT"}
11
11
  requires-python = ">=3.8"
@@ -0,0 +1,231 @@
1
+ Metadata-Version: 2.4
2
+ Name: vssh
3
+ Version: 4.0.0
4
+ Summary: [DEPRECATED - Use Go version] Secure SSH/SCP tool
5
+ Author-email: MeshPOP <mpop@mpop.dev>
6
+ License: MIT
7
+ Project-URL: Homepage, https://github.com/meshpop/vssh
8
+ Project-URL: Repository, https://github.com/meshpop/vssh
9
+ Keywords: ssh,scp,tailscale,p2p,vpn,mcp,remote
10
+ Classifier: Development Status :: 4 - Beta
11
+ Classifier: Environment :: Console
12
+ Classifier: Intended Audience :: Developers
13
+ Classifier: Intended Audience :: System Administrators
14
+ Classifier: License :: OSI Approved :: MIT License
15
+ Classifier: Operating System :: POSIX :: Linux
16
+ Classifier: Operating System :: MacOS
17
+ Classifier: Programming Language :: Python :: 3
18
+ Classifier: Topic :: System :: Networking
19
+ Requires-Python: >=3.8
20
+ Description-Content-Type: text/markdown
21
+ License-File: LICENSE
22
+ Dynamic: license-file
23
+
24
+ # vssh
25
+
26
+ > ⚠️ **DEPRECATED**: This Python package is no longer maintained. Please use the Go version instead:
27
+ > ```bash
28
+ > # macOS
29
+ > brew install meshpop/tap/vssh
30
+ >
31
+ > # Linux
32
+ > curl -sSL https://github.com/meshpop/vssh/releases/latest/download/vssh-linux-amd64 -o /usr/local/bin/vssh && chmod +x /usr/local/bin/vssh
33
+ > ```
34
+ > GitHub: https://github.com/meshpop/vssh
35
+
36
+ [![PyPI](https://img.shields.io/pypi/v/vssh)](https://pypi.org/project/vssh/)
37
+ [![Python](https://img.shields.io/pypi/pyversions/vssh)](https://pypi.org/project/vssh/)
38
+ [![License: MIT](https://img.shields.io/badge/license-MIT-blue.svg)](LICENSE)
39
+
40
+ **Fast SSH alternative for server fleets. One shared secret. No key management.**
41
+
42
+ ```bash
43
+ pip install vssh
44
+ ```
45
+
46
+ Pure Python standard library. No external packages. Linux and macOS.
47
+
48
+ ---
49
+
50
+ ## Why vssh?
51
+
52
+ | | SSH | vssh |
53
+ |---|---|---|
54
+ | Authentication | Per-server public keys | One shared HMAC secret |
55
+ | Add a new server | Generate + copy key | Just set the same secret |
56
+ | Revoke access | Remove key from every server | Rotate secret once |
57
+ | Connection setup | Full handshake (~200–400ms) | Token check (~1ms) |
58
+ | Server discovery | IPs / DNS | wire mesh auto-discovery |
59
+ | Fleet health | None | `vssh status` — all nodes |
60
+ | AI management | ✗ | ✓ MCP integration |
61
+
62
+ ---
63
+
64
+ ## How it works
65
+
66
+ Each server runs a persistent daemon on TCP port 48291. Every request includes an HMAC-SHA256 time-based token derived from the shared secret — no public key cryptography, no handshake overhead.
67
+
68
+ ```
69
+ ┌──────────────────────────────────────┐
70
+ │ Fleet │
71
+ │ ┌──────┐ ┌──────┐ ┌──────┐ │
72
+ │ │ web1 │ │ web2 │ │ db1 │ ... │
73
+ │ │:48291│ │:48291│ │:48291│ │
74
+ │ └──┬───┘ └──┬───┘ └──┬───┘ │
75
+ │ └─────────┴─────────┘ │
76
+ │ wire / VPN │
77
+ └─────────────────┬────────────────────┘
78
+ │ TCP :48291
79
+ ┌──────┴──────┐
80
+ │ vssh client │
81
+ └─────────────┘
82
+ ```
83
+
84
+ ---
85
+
86
+ ## Setup
87
+
88
+ ### 1. Install and start the daemon on each server
89
+
90
+ ```bash
91
+ export VSSH_SECRET=your-shared-secret
92
+ vssh server
93
+
94
+ # Or install as a systemd service:
95
+ vssh install
96
+ ```
97
+
98
+ Generate a strong secret:
99
+ ```bash
100
+ python3 -c "import secrets; print(secrets.token_hex(32))"
101
+ ```
102
+
103
+ ### 2. Configure the client
104
+
105
+ With [wire](https://github.com/meshpop/wire) mesh VPN, vssh auto-discovers all nodes — no client config needed.
106
+
107
+ For standalone use, create `~/.vssh/config`:
108
+
109
+ ```ini
110
+ web1=192.168.1.10
111
+ web2=192.168.1.11
112
+ db1=192.168.1.20
113
+ SECRET=your-shared-secret
114
+ ```
115
+
116
+ ---
117
+
118
+ ## CLI Reference
119
+
120
+ ### Fleet status
121
+
122
+ ```bash
123
+ vssh status # All nodes — online/offline, latency
124
+ vssh status --full # Status + disk, memory, load
125
+ ```
126
+
127
+ ### Remote execution
128
+
129
+ ```bash
130
+ vssh web1 "df -h" # Run command
131
+ vssh web1 # Interactive shell
132
+ vssh web1 "df -h && free -h" # Chained commands
133
+ ```
134
+
135
+ ### File transfer
136
+
137
+ ```bash
138
+ vssh put ./nginx.conf web1:/etc/nginx/ # Upload
139
+ vssh get web1:/var/log/app.log ./ # Download
140
+ vssh sync ./config/ web1:/etc/app/ # Sync directory
141
+ vssh rsync <local> <host>:<remote> # Delta sync (changed blocks only)
142
+ ```
143
+
144
+ Auto-compresses text files. Skips upload if remote file is identical (MD5 check).
145
+
146
+ ### RPC — typed JSON data
147
+
148
+ ```bash
149
+ vssh rpc web1 get_disk
150
+ vssh rpc web1 get_processes '{"n": 5, "sort": "mem"}'
151
+ vssh rpc-list web1 # List all available methods
152
+ ```
153
+
154
+ | Method | Returns |
155
+ |---|---|
156
+ | `get_disk` | Disk usage |
157
+ | `get_memory` | Memory stats |
158
+ | `get_load` | Load averages |
159
+ | `get_processes` | Top processes |
160
+ | `get_gpu` | GPU VRAM, utilization, temp |
161
+ | `get_logs` | Log file or journalctl |
162
+ | `list_services` | Running systemd services |
163
+ | `restart_service` | Restart nginx / docker / postgresql / redis |
164
+ | `docker_containers` | Docker container list |
165
+ | `file_read` / `file_write` | File operations |
166
+
167
+ ### Other
168
+
169
+ ```bash
170
+ vssh speed-test web1 # Measure transfer speed
171
+ vssh history [count] [filter] # Command history
172
+ vssh stats [days] # Transfer stats
173
+ vssh pipe-up web1:/path # Pipe stdin to remote file
174
+ vssh pipe-down web1:"cmd" # Pipe remote output to stdout
175
+ ```
176
+
177
+ ---
178
+
179
+ ## Tailscale Failover
180
+
181
+ If a node's primary VPN IP is unreachable, vssh automatically tries the Tailscale IP:
182
+
183
+ 1. Try wire VPN IP (1.5s timeout)
184
+ 2. Fall back to Tailscale IP, cache for 60s
185
+ 3. After 60s: retry wire — if recovered, clear failover
186
+
187
+ The failover map is built automatically by cross-referencing `tailscale status` with wire peers.
188
+
189
+ ---
190
+
191
+ ## AI Management via MCP
192
+
193
+ ```json
194
+ {
195
+ "mcpServers": {
196
+ "vssh": { "command": "vssh-mcp" }
197
+ }
198
+ }
199
+ ```
200
+
201
+ > "Check which servers are online and show me disk usage"
202
+ > "Deploy the new config to all web servers and reload nginx"
203
+ > "What's using the most memory on db1?"
204
+
205
+ ### MCP Tools
206
+
207
+ | Tool | Description |
208
+ |---|---|
209
+ | `vssh_status` | Fleet status — all nodes, latency |
210
+ | `vssh_exec` | Run command on remote server |
211
+ | `vssh_put` / `vssh_get` | Upload / download file |
212
+ | `vssh_sync` | Sync directory |
213
+ | `vssh_speed_test` | Transfer speed |
214
+ | `vssh_tunnel` | Port-forward tunnel |
215
+ | `vssh_keys` | Show secret and server list |
216
+
217
+ ---
218
+
219
+ ## MeshPOP Stack
220
+
221
+ ```
222
+ mpop Fleet orchestration — monitor, manage, automate
223
+ vssh Authenticated transport — remote exec, file transfer ← this
224
+ wire Encrypted mesh VPN — connects all nodes
225
+ ```
226
+
227
+ ---
228
+
229
+ ## License
230
+
231
+ MIT — [MeshPOP](https://github.com/meshpop)
File without changes