SSH Hosts

Your ssh config's hosts, one Enter from a terminal running ssh.

palv0.1.0Developerbundled

Install in pal

Ships inside pal. Installing puts an editable copy ahead of the bundled one.

SSH Hosts: Hosts sectioned by the file they came from, user and port on the right, a jump host tagged
Hosts sectioned by the file they came from, user and port on the right, a jump host tagged
SSH Hosts: The real host name finds the alias from the root
The real host name finds the alias from the root
SSH Hosts: Connect, copy the host or the command, the -J form, ping
Connect, copy the host or the command, the -J form, ping
SSH Hosts: Ping: one echo, the round trip as a toast
Ping: one echo, the round trip as a toast
1 of 4

What it does

SSH Hosts

Every Host in ~/.ssh/config that is a name rather than a pattern (*, ? and ! entries are skipped, a Host a b line gives two rows), in file order. Include lines are followed one level: ~, absolute and globbed operands work, a relative one is under ~/.ssh. A Match block ends the current host. The section is the file a host came from, relative to the config's directory (.ssh/config, .ssh/conf.d/work.conf).

The palette

The row is the host's name; HostName is the subtitle and a keyword, so the real name finds the alias from the root; User is an accessory and a keyword, Port a :22-style tag. A host with ProxyJump carries a via <jump> tag and the jump as a keyword. The palette is indexed: listed once, searched from the root, refreshed with cmd+r after the config changes.

With include_known_hosts on, the names in ~/.ssh/known_hosts (next to the config) come after, in a last Known hosts section: [host]:port unwrapped, comma lists split, hashed lines, bare IPs and hosts already in the config skipped.

Connect opens a terminal window running ssh <host> and hides the panel. Ping sends one echo to the HostName (else the name) with a 2 s wait and toasts the round trip (web-1.example.com: 3 ms), or why it did not answer; the panel stays open.

Keyboard

keys action
enter Connect: a terminal window running ssh <host>
cmd+c Copy host: the name as written in the config
cmd+shift+c Copy ssh command: ssh <host>
cmd+shift+j Copy ssh -J command: ssh -J <jump> <host> (only on a host with a ProxyJump)
cmd+p Ping: one echo, the round trip as a toast
cmd+r Refresh: read the config again

The plain command already goes through the config's ProxyJump; the -J form is for a machine that does not have your config.

Setup

An ~/.ssh/config with Host entries; ssh and ping on PATH. Nothing else.

Which terminal Connect opens:

  • macOS: the terminal setting. auto takes the first installed of kitty, Ghostty, Alacritty, iTerm2, Terminal (Terminal is always there, so it is the fallback). kitty gets kitty -1 ssh host (a new OS window in the running instance when that was started single-instance), Ghostty and Alacritty open -na <app> --args -e ssh host, Terminal and iTerm2 an AppleScript that opens a window running the command, which asks for the Automation permission the first time. A terminal that is picked but not installed keeps the panel open with a toast.
  • Linux: $TERMINAL, else the first of kitty, foot, alacritty, xterm on PATH; kitty and foot take the command as arguments, the others after -e.

Settings, [extensions.ssh]:

key type default what
config path ~/.ssh/config The config to read. ~ is expanded; known_hosts is looked for next to it.
include_known_hosts bool false List the names in known_hosts too, in a last section.
terminal auto, kitty, Terminal, iTerm2, Ghostty, Alacritty auto macOS only: which terminal Connect opens.

What it does not do

  • Run ssh inside the panel: Connect hands the command to a terminal window and pal hides.
  • Pattern hosts (Host *.example.com) and Match blocks: they are not rows, though their settings still apply when ssh runs.
  • Nested includes: an Include inside an included file is not followed.
  • Passwords, keys or agents: ssh's own business, in the terminal.

Platforms

macOS and Linux. The terminal is chosen per platform as above; ping's wait flag is -W 2000 on macOS and -W 2 on Linux, the same one echo.

Palettes 1

  • Sshsshlist

    Every Host in your ssh config, and what it connects to.

    • Connect in a terminal
    • CCopy the host name
    • CCopy the ssh command
    • PPing

Actions

  • ConnectA terminal window running ssh <host>.
  • Copy hostC
  • Copy ssh commandssh <host>.C
  • Copy ssh -J commandssh -J <jump> <host>, on a host with a ProxyJump.J
  • PingOne echo to the HostName; the round trip as a toast.P

Settings

Extension, [extensions.ssh]

config
~/.ssh/config path

The ssh config to read; Include lines in it are followed one level.

include_known_hosts
Off boolean

Only hosts you have connected to by name; hashed and numeric entries are skipped.

terminal
Auto select

Which terminal Connect opens. Auto picks the first installed of kitty, Ghostty, Alacritty, iTerm2, Terminal. On Linux $TERMINAL, else kitty, foot, alacritty, xterm. One of auto, kitty, Terminal, iTerm2, Ghostty, Alacritty.

Defaults shown. Change them in pal's settings window or in the config file.