Tips and Tricks When Working via ssh

Probably every Linux who uses ssh to work remotely, knows the X forwarding feature. However, there are some more nice features of the ssh client that are well documented but not as well known.

Verifying Host Keys

If you ever wondered how you should know and verify the host key, that is presented to you, when you connect to a server for the first time, it is as easy as:

$ ssh-keygen -l -f /etc/ssh/ssh_host_rsa_key

Escape Commands

It’s particularly annoying when a ssh session timed out, but your ssh client doesn’t know yet, as it is unresponsive and can’t be killed via Ctrl-C. This happens a lot to me, when I resume my laptop from sleep. Fortunately it is easy to disconnect using the escape character ~ and the command . (a dot). This only works after a new line, so to be sure there is one, press the enter key before: ⏎~.

You can also move the ssh session to a background task, like Ctrl-Z would do for most other tasks on the shell by prefixing it with the escape character (and a new line).

There are more such commands, but since I never needed them in practice, I’ll just copy the respective section from the man page for completeness


When a pseudo-terminal has been requested, ssh supports a number of functions through the use of an escape character.

A single tilde character can be sent as ~~ or by following the tilde by a character other than those described below. The escape character must always follow a newline to be interpreted as special. The escape character can be changed in configuration files using the EscapeChar configuration directive or on the command line by the -e option.

The supported escapes (assuming the default ‘~’) are:

~. Disconnect.

~^Z Background ssh.

~# List forwarded connections.

~& Background ssh at logout when waiting for forwarded connection / X11 sessions to terminate.

~? Display a list of escape characters.

~B Send a BREAK to the remote system (only useful if the peer supports it).

~C Open command line. Currently this allows the addition of port forwardings using the -L, -R and -D options (see above). It also allows the cancellation of existing port-forwardings with -KL[bind_address:]port for local, -KR[bind_address:]port for remote and -KD[bind_address:]port for dynamic port-forwardings. !command allows the user to execute a local command if the PermitLocalCommand option is enabled in ssh_config(5). Basic help is available, using the -h option.

~R Request rekeying of the connection (only useful if the peer supports it).

~V Decrease the verbosity (LogLevel) when errors are being written to stderr.

~v Increase the verbosity (LogLevel) when errors are being written to stderr.