Advanced Topics
Using the ~/.ssh/config
file
The OpenSSH client behavior can be controlled with both command line options
and configuration settings in ~/.ssh/config
. Setting up a config file can
save some typing.
Consider your local username being grace
but you are known as hopper
on the host common.business-oriented.language.kit.edu
and you are also required to use a special private key ~/.ssh/cobol.id_ed25519
to authenticate.
The command line call will look like this:
ssh -i .ssh/cobol.id_ed25519 hopper@common.business-oriented.language.kit.edu
To abbreviate this to ssh cobol
add the following to ~/.ssh/config
:
Host cobol
HostName common.business-oriented.language.kit.edu
User hopper
IdentityFile ~/.ssh/cobol.id_ed25519
For other options consult the documentation in the ssh_config
man page. Your
service provider may provide some useful snippets as well. Again, be careful
with the settings you make, only copy them from trusted sources or when you
fully understand their implications.
Bastion Hosts
Some setups have the concept of a bastion or jump host, which acts as the single point of entry to the systems beyond. In the past, this was one use case for SSH agent forwarding, which creates tremendous security risks, should the bastion host ever be compromised.
OpenSSH 7.3+ has a feature called ProxyJump
as a safe alternative to agent
forwarding. If you want to connect to backend.internal.kit.edu
through a jump
host called jump.internal.kit.edu
, use something like:
$ ssh -J jump.internal.kit.edu backend.internal.kit.edu
This can also be added to ~/.ssh/config
:
Host *.internal.kit.edu !jump.internal.kit.edu
ProxyJump jump.internal.kit.edu
Automated SSH Logins
For automation purposes, unattended SSH logins may be necessary. This is one of the few exceptions where private keys without a passphrase are acceptable.
As a security measure, create new keys for each automation job and limit their
privileges on the server. See the sshd
man page for details about the
authorized_keys
file format.
$ cat ~/.ssh/authorized_keys
restrict,command="uptime" ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAID9icauGFYzZCWe7P6tVH9/70pGON39H+CVB0DEY2PSg uptime_key
$ ssh -T user@host.kit.edu
11:07:28 up 24 days, 15:29, 0 users, load average: 0.02, 0.05, 0.02
Connection to host.kit.edu closed.
ssh -T
does not try to allocate a pseudo-terminal, which would fail anyway
because of the restrict
key option on the server. Without it, the connection
will still succeed but the following warning will always be printed:
PTY allocation request failed on channel 0
Attention
Older versions of OpenSSH do not recognize the restrict
option. It that
is the case substitute it with
no-agent-forwarding,no-port-forwarding,no-pty,no-user-rc,no-X11-forwarding