====== ssh authentification ====== Generate ssh keys to access remote hosts via ssh. Use //one// key pair //for each// host/remote host pair (and user) **or** one key pair for each host. ===== ssh-keygen ===== Generate a key pair (public and private key), using ''ssh-keygen(1)''. To identify each (public) key (e.g. to revoke access), the (public) key must contain the following information: * The algorithm used to generate the key * The host the key is used for (your workstation, must be the fqdn!) * The remote host the key is used for connecting to (must be the fqdn!) * The user of the key (full name and email address) The following command generates such a key, using a secure algorithm: ssh-keygen -t ed25519 -o -a 100 \ -f "$HOME/.ssh/id_ed25519_$(hostname --fqdn)_{remote-fqdn}" \ -C "Max Maintainer $USER@$(hostname --fqdn)" Alternativly, if preferred, you may use one key for each host. For such keys include your email address instead of the local host fqdn in the keys' file name. ssh-keygen -t ed25519 -o -a 100 \ -f "$HOME/.ssh/id_ed25519_maintainer@rkcsd.com_{remote-fqdn}" \ -C "Max Maintainer " Don't forget to provide a strong passphrase! Do //NOT// use a blank passphrase! ===== ssh-copy-id ===== If you have intermediate access to the remote host, you can upload your id safely, using ''ssh-copy-id(1)''. If you do not have access give the //public// key to a admin of the remote host. Authenticate with a passphrase: ssh-copy-id -f -i {id-file.pub} {destination} Authenticate with another identify file: ssh-copy-id -f -i {id-file.pub} -o "IdentityFile {id-already-authorized}" {destination} ===== ssh_config ===== It is recommended to create an entry per remote host in your ''ssh_config(5)''. Open ''~/.ssh/config'' in your favorite editor and create the following block: Host {remote-alias} Hostname {remote-host} User {remote-ssh-user} Port {remote-ssh-port} PreferredAuthentications publickey #IdentityFile ~/.ssh/id_ed25519_maintainer@rkcsd.com_{remote-fqdn}.pub IdentityFile ~/.ssh/id_ed25519_%l_{remote-fqdn}.pub The ''%l'' is substituted with your host's fqdn. This enables you to use this configuration at multiple hosts, when using a seperate key on each. You then can connect with the alias (and let ''ssh-agent(1)'' and DE friends manage unlocking the keys; to unlock a key manually use ''ssh-add(1)''). ssh {remote-alias} The defined host alias works for any ssh command (e.g. ''scp(1)'')! To still be able to login to other hosts with a password, add this rule **after** all other rules in your ''ssh_config''. Host * IdentitiesOnly yes PreferredAuthentications password ===== Good stuff ===== * [[https://stribika.github.io/2015/01/04/secure-secure-shell.html]] * [[https://www.youtube.com/watch?v=qvdlLTyUJ5I]]