multiSSH3 6.29__tar.gz → 6.31__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.
- {multissh3-6.29 → multissh3-6.31}/PKG-INFO +15 -1
- {multissh3-6.29 → multissh3-6.31}/README.md +14 -0
- {multissh3-6.29 → multissh3-6.31}/mssh_complete.py +1437 -43
- {multissh3-6.29 → multissh3-6.31}/multiSSH3.egg-info/PKG-INFO +15 -1
- {multissh3-6.29 → multissh3-6.31}/multiSSH3.egg-info/SOURCES.txt +6 -0
- {multissh3-6.29 → multissh3-6.31}/multiSSH3.py +111 -18
- multissh3-6.31/tests/test_complete_diagnose.py +339 -0
- {multissh3-6.29 → multissh3-6.31}/tests/test_complete_editor.py +53 -0
- {multissh3-6.29 → multissh3-6.31}/tests/test_complete_eval.py +51 -0
- multissh3-6.31/tests/test_complete_hoststate.py +91 -0
- {multissh3-6.29 → multissh3-6.31}/tests/test_complete_index.py +14 -0
- {multissh3-6.29 → multissh3-6.31}/tests/test_complete_keys.py +227 -5
- {multissh3-6.29 → multissh3-6.31}/tests/test_complete_picker.py +65 -0
- multissh3-6.31/tests/test_complete_probe.py +182 -0
- {multissh3-6.29 → multissh3-6.31}/tests/test_complete_untrusted.py +14 -0
- {multissh3-6.29 → multissh3-6.31}/tests/test_helpers_extra.py +27 -0
- multissh3-6.31/tests/test_host_validity.py +92 -0
- multissh3-6.31/tests/test_option_no_effect.py +52 -0
- multissh3-6.31/tests/test_runtime_dir.py +94 -0
- {multissh3-6.29 → multissh3-6.31}/multiSSH3.egg-info/dependency_links.txt +0 -0
- {multissh3-6.29 → multissh3-6.31}/multiSSH3.egg-info/entry_points.txt +0 -0
- {multissh3-6.29 → multissh3-6.31}/multiSSH3.egg-info/top_level.txt +0 -0
- {multissh3-6.29 → multissh3-6.31}/setup.cfg +0 -0
- {multissh3-6.29 → multissh3-6.31}/setup.py +0 -0
- {multissh3-6.29 → multissh3-6.31}/tests/test_cli_branches.py +0 -0
- {multissh3-6.29 → multissh3-6.31}/tests/test_cli_processing.py +0 -0
- {multissh3-6.29 → multissh3-6.31}/tests/test_color_helpers.py +0 -0
- {multissh3-6.29 → multissh3-6.31}/tests/test_compact_hostnames.py +0 -0
- {multissh3-6.29 → multissh3-6.31}/tests/test_complete_blesh.py +0 -0
- {multissh3-6.29 → multissh3-6.31}/tests/test_complete_context.py +0 -0
- {multissh3-6.29 → multissh3-6.31}/tests/test_complete_engine.py +0 -0
- {multissh3-6.29 → multissh3-6.31}/tests/test_complete_hosts.py +0 -0
- {multissh3-6.29 → multissh3-6.31}/tests/test_complete_lex.py +0 -0
- {multissh3-6.29 → multissh3-6.31}/tests/test_complete_mssh_helpers.py +0 -0
- {multissh3-6.29 → multissh3-6.31}/tests/test_complete_shells.py +0 -0
- {multissh3-6.29 → multissh3-6.31}/tests/test_complete_store.py +0 -0
- {multissh3-6.29 → multissh3-6.31}/tests/test_complete_suggest.py +0 -0
- {multissh3-6.29 → multissh3-6.31}/tests/test_complete_terminal.py +0 -0
- {multissh3-6.29 → multissh3-6.31}/tests/test_config_cli.py +0 -0
- {multissh3-6.29 → multissh3-6.31}/tests/test_config_validate.py +0 -0
- {multissh3-6.29 → multissh3-6.31}/tests/test_curses_branches.py +0 -0
- {multissh3-6.29 → multissh3-6.31}/tests/test_curses_event_loop.py +0 -0
- {multissh3-6.29 → multissh3-6.31}/tests/test_curses_tui.py +0 -0
- {multissh3-6.29 → multissh3-6.31}/tests/test_expand_hostnames.py +0 -0
- {multissh3-6.29 → multissh3-6.31}/tests/test_file_trust.py +0 -0
- {multissh3-6.29 → multissh3-6.31}/tests/test_harness_smoke.py +0 -0
- {multissh3-6.29 → multissh3-6.31}/tests/test_host.py +0 -0
- {multissh3-6.29 → multissh3-6.31}/tests/test_ipmi_lockout_wait.py +0 -0
- {multissh3-6.29 → multissh3-6.31}/tests/test_main_lifecycle.py +0 -0
- {multissh3-6.29 → multissh3-6.31}/tests/test_output_merge.py +0 -0
- {multissh3-6.29 → multissh3-6.31}/tests/test_run_command.py +0 -0
- {multissh3-6.29 → multissh3-6.31}/tests/test_run_command_branches.py +0 -0
- {multissh3-6.29 → multissh3-6.31}/tests/test_run_command_characterization.py +0 -0
- {multissh3-6.29 → multissh3-6.31}/tests/test_run_on_hosts.py +0 -0
- {multissh3-6.29 → multissh3-6.31}/tests/test_run_on_hosts_modes.py +0 -0
- {multissh3-6.29 → multissh3-6.31}/tests/test_runtime_branch_matrix.py +0 -0
- {multissh3-6.29 → multissh3-6.31}/tests/test_smoke_optional.py +0 -0
- {multissh3-6.29 → multissh3-6.31}/tests/test_stream_reader.py +0 -0
- {multissh3-6.29 → multissh3-6.31}/tests/test_unavailable_hosts.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: multiSSH3
|
|
3
|
-
Version: 6.
|
|
3
|
+
Version: 6.31
|
|
4
4
|
Summary: Run commands on multiple hosts via SSH
|
|
5
5
|
Home-page: https://github.com/yufei-pan/multiSSH3
|
|
6
6
|
Author: Yufei Pan
|
|
@@ -415,12 +415,26 @@ While you type an mssh line, the most likely rest of it shows in grey after the
|
|
|
415
415
|
|
|
416
416
|
Ctrl-R on an mssh line opens a menu below the prompt with the candidates for the word under the cursor (hosts, commands for those hosts, option values), how often and how long ago you used them; Tab switches to whole past invocations. Type to filter, ↑/↓ to move, Enter to insert, Esc to leave the line as it was. On any other line Ctrl-R does what it did before (readline's search, fzf, atuin, ...).
|
|
417
417
|
|
|
418
|
+
### Warnings before Enter
|
|
419
|
+
|
|
420
|
+
While you type an mssh line, words already typed that mssh would trip over are marked, and one line under the prompt says why. Nothing is ever blocked: Enter runs what you typed.
|
|
421
|
+
|
|
422
|
+
- **Unknown host:** a name mssh would reject (no IP, alias or hosts-file entry, not in DNS, not mapped by your ssh config), with the host you probably meant: `gpu017: unknown host — did you mean gpu17?`
|
|
423
|
+
- **Range surprises:** a range or alias with members mssh would reject: `node[1-16]: 9 of 16 hosts unknown (node1, node2, node3, …) — did you mean node[01-16]?`
|
|
424
|
+
- **Unreachable host:** one that failed in your recent mssh runs (`will be skipped` with `-su`), or that answered ping recently and stopped.
|
|
425
|
+
- **Conflicting options:** two options mssh refuses together, an option given twice, or one that does nothing on this line (`-iu does nothing: only used with --ipmi`).
|
|
426
|
+
|
|
427
|
+
zsh, bash with ble.sh and the plain-bash line editor mark the words and show the reason; fish 4 prints the reason under the line after a space; fish 3 and plain bash without the editor list the warnings at the top of the Ctrl-R menu.
|
|
428
|
+
|
|
429
|
+
Hosts are checked in the background by `mssh-complete probe`: DNS, `ssh -G` (which prints what your ssh config says about the name) and ping. It never connects or logs in to a host itself, so it cannot trip fail2ban. One exception comes from your ssh config: `ssh -G` runs the commands of `Match exec` lines, so a `Match exec` command that contacts the host (such as `nc -z %h 22` to choose a jump host) runs for every host name you type, before Enter. Check `~/.ssh/config` and `/etc/ssh/ssh_config` (and the files they `Include`) if fail2ban matters. The prober runs at low priority, as many checks at once as mssh's own `max_connections` allows. What it learns lives in mssh's runtime directory (`$XDG_RUNTIME_DIR/multiSSH3`, else `/run/user/<uid>/multiSSH3`, `/dev/shm/multiSSH3-<uid>` or the temp dir) and is gone after a reboot. `mssh-complete eval --diagnostics` replays your history and lists the hosts mssh would reject.
|
|
430
|
+
|
|
418
431
|
| Environment variable | Effect |
|
|
419
432
|
| --- | --- |
|
|
420
433
|
| `MSSH_COMPLETE_TIMEOUT` | Seconds the shell waits for an answer (default 0.3) |
|
|
421
434
|
| `MSSH_COMPLETE_GHOST_TIMEOUT` | ble.sh only: milliseconds a grey suggestion may take (default 300) |
|
|
422
435
|
| `MSSH_COMPLETE_SHELL_HISTORY` | Lines of shell history sent along (default 1000) |
|
|
423
436
|
| `MSSH_COMPLETE_EDITOR` | `1` turns on the plain-bash mssh line editor (`install bash editor` sets it) |
|
|
437
|
+
| `MSSH_COMPLETE_PING_TTL` | Seconds a host that answered ping is expected to keep answering (default: mssh's unreachable host expiry, 600) |
|
|
424
438
|
| `MSSH_COMPLETE_DEBUG` | `1` logs errors to `complete.log` in the cache directory |
|
|
425
439
|
|
|
426
440
|
> Tested with bash 4.2 to 5.2, zsh 5.5 to 5.9 (with `compinit` loaded; zsh-autosuggestions 0.7.1), fish 3.3 to 4.0 and the 2026-09-08 ble.sh nightly. Since 6.28 mssh records hosts in its history as typed; older history lines hold them expanded.
|
|
@@ -390,12 +390,26 @@ While you type an mssh line, the most likely rest of it shows in grey after the
|
|
|
390
390
|
|
|
391
391
|
Ctrl-R on an mssh line opens a menu below the prompt with the candidates for the word under the cursor (hosts, commands for those hosts, option values), how often and how long ago you used them; Tab switches to whole past invocations. Type to filter, ↑/↓ to move, Enter to insert, Esc to leave the line as it was. On any other line Ctrl-R does what it did before (readline's search, fzf, atuin, ...).
|
|
392
392
|
|
|
393
|
+
### Warnings before Enter
|
|
394
|
+
|
|
395
|
+
While you type an mssh line, words already typed that mssh would trip over are marked, and one line under the prompt says why. Nothing is ever blocked: Enter runs what you typed.
|
|
396
|
+
|
|
397
|
+
- **Unknown host:** a name mssh would reject (no IP, alias or hosts-file entry, not in DNS, not mapped by your ssh config), with the host you probably meant: `gpu017: unknown host — did you mean gpu17?`
|
|
398
|
+
- **Range surprises:** a range or alias with members mssh would reject: `node[1-16]: 9 of 16 hosts unknown (node1, node2, node3, …) — did you mean node[01-16]?`
|
|
399
|
+
- **Unreachable host:** one that failed in your recent mssh runs (`will be skipped` with `-su`), or that answered ping recently and stopped.
|
|
400
|
+
- **Conflicting options:** two options mssh refuses together, an option given twice, or one that does nothing on this line (`-iu does nothing: only used with --ipmi`).
|
|
401
|
+
|
|
402
|
+
zsh, bash with ble.sh and the plain-bash line editor mark the words and show the reason; fish 4 prints the reason under the line after a space; fish 3 and plain bash without the editor list the warnings at the top of the Ctrl-R menu.
|
|
403
|
+
|
|
404
|
+
Hosts are checked in the background by `mssh-complete probe`: DNS, `ssh -G` (which prints what your ssh config says about the name) and ping. It never connects or logs in to a host itself, so it cannot trip fail2ban. One exception comes from your ssh config: `ssh -G` runs the commands of `Match exec` lines, so a `Match exec` command that contacts the host (such as `nc -z %h 22` to choose a jump host) runs for every host name you type, before Enter. Check `~/.ssh/config` and `/etc/ssh/ssh_config` (and the files they `Include`) if fail2ban matters. The prober runs at low priority, as many checks at once as mssh's own `max_connections` allows. What it learns lives in mssh's runtime directory (`$XDG_RUNTIME_DIR/multiSSH3`, else `/run/user/<uid>/multiSSH3`, `/dev/shm/multiSSH3-<uid>` or the temp dir) and is gone after a reboot. `mssh-complete eval --diagnostics` replays your history and lists the hosts mssh would reject.
|
|
405
|
+
|
|
393
406
|
| Environment variable | Effect |
|
|
394
407
|
| --- | --- |
|
|
395
408
|
| `MSSH_COMPLETE_TIMEOUT` | Seconds the shell waits for an answer (default 0.3) |
|
|
396
409
|
| `MSSH_COMPLETE_GHOST_TIMEOUT` | ble.sh only: milliseconds a grey suggestion may take (default 300) |
|
|
397
410
|
| `MSSH_COMPLETE_SHELL_HISTORY` | Lines of shell history sent along (default 1000) |
|
|
398
411
|
| `MSSH_COMPLETE_EDITOR` | `1` turns on the plain-bash mssh line editor (`install bash editor` sets it) |
|
|
412
|
+
| `MSSH_COMPLETE_PING_TTL` | Seconds a host that answered ping is expected to keep answering (default: mssh's unreachable host expiry, 600) |
|
|
399
413
|
| `MSSH_COMPLETE_DEBUG` | `1` logs errors to `complete.log` in the cache directory |
|
|
400
414
|
|
|
401
415
|
> Tested with bash 4.2 to 5.2, zsh 5.5 to 5.9 (with `compinit` loaded; zsh-autosuggestions 0.7.1), fish 3.3 to 4.0 and the 2026-09-08 ble.sh nightly. Since 6.28 mssh records hosts in its history as typed; older history lines hold them expanded.
|