======SSH====== =====Install SSH Server===== In Ubuntu 16.04, you can install SSH server with sudo apt-get install openssh-server You can ensure it starts at boot with systemctl enable ssh.socketv =====SSH Key Generation===== To generate an RSA key pair to work with version 2 of the protocol, type the following command at a shell prompt. Accept the default file location of ~/.ssh/id_rsa. Good security practice dictates that you should enter a password that is unique. ssh-keygen -t rsa The public key is written to ~/.ssh/id_rsa.pub. The private key is written to ~/.ssh/id_rsa. Never distribute your private key to anyone. Change the permissions of the .ssh directory using the following command: chmod 755 ~/.ssh Copy the contents of ~/.ssh/id_rsa.pub into the file ~/.ssh/authorized_keys on the machine to which you want to connect. If the file ~/.ssh/authorized_keys exist, append the contents of the file ~/.ssh/id_rsa.pub to the file ~/.ssh/authorized_keys on the other machine. An easy way to do this is by using the ssh-copy-id command as follows ssh-copy-id -i ~/.ssh/id_rsa.pub username@target.example.com Change the permissions of the authorized_keys file using the following command: ssh username@target.example.com 'chmod 644 ~/.ssh/authorized_keys' =====Run Single Command Remotely===== ssh username@target.example.com 'ls -l' =====Run Multiple Commands Remotely===== ssh username@target.example.com 'ls -l; ps -aux; whoami' =====Run Single Command Remotely and Interactively===== Note the -t flag. That tells SSH that you'll be interacting with remote shell. Without the -t flag, top will return results after which SSH will log you out of the remote host immediately. With the -t flag, SSH keeps you logged in until you exit the interactive command. The -t flag can be used with most interactive commands, including text editors like pico and vi. ssh -t username@target.example.com 'top' =Run Command With Single Quotes= When running remote SSH commands, you may need to escape quotes. Replace ' with '"'"' 's/%//g' With sed '"'"'s/%//g'"'"' =====Connect to Host Without Checking Keys===== While this is dangerous, it can be useful when running some data gathering scripts on a trusted network. ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no username@target.example.com 'ls -l' =====List SSH Fingerprint===== If you want to see the fingerprint that you see first time you connect to a server, run this command ssh-keygen -lf /etc/ssh/ssh_host_rsa_key.pub You may also need the following command (but probably not) ssh-keygen -lf /etc/ssh/ssh_host_key.pub To list the key in the format shown by PuTTY, use ssh-keygen -l -E md5 -f /etc/ssh/ssh_host_rsa_key.pub Show all for file in /etc/ssh/*_key.pub; do ssh-keygen -lf $file; done Determine the fingerprint of the RSA host key ssh-keygen -l -f /etc/ssh/ssh_host_rsa_key.pub Determine the fingerprint of the ED25519 host key ssh-keygen -l -f /etc/ssh/ssh_host_ed25519_key.pub Determine the fingerprint of the ECDSA host key ssh-keygen -l -f /etc/ssh/ssh_host_ecdsa_key.pub =====Fix SSH Key Generation Problem in CentOS 6===== By default, CentOS 6.0 and some later releases of 6.x, SELinux interferes with the root user's ability to generate SSH keys. To fix the problem, run the following commands as the root user. chcon -t ssh_home_t ~/.ssh =====Fix Remote Root Login on CentOS 6===== By default, CentOS 6.0 and some later releases of 6.x, SELinux prevents the root user from logging into a system using SSH. This is because of SELinux attributes on the /root/.ssh/authroized_keys file. I believe this is due to the policy in /etc/selinux/targeted/contexts/users/root. To fix this, we just run the following command. restorecon -R -v /root/.ssh =====Restrict Users and Groups from Login===== To only allow a specific list of users and groups to login, add the following to /etc/ssh/sshd_config AllowUsers user1 user2 AllowGroups group1 group2 =====Block Users and Groups from Login===== To allow all users to login except for a specific list, add the following to /etc/ssh/sshd_config DenyUsers user1 user2 DenyGroups group1 group2 =====Fix Logon Delay===== You may find that when connecting to a SSH server, the password prompt takes a long time to appear. Try setting the following line at the bottom of /etc/ssh/sshd_config GSSAPIAuthentication no Then restart the sshd server with the following command service sshd restart If that doesn't work, try adding the following the bottom of /etc/ssh/sshd_config UseDNS no =====Extract Public Key===== chmod 600 private.pem ssh-keygen -f private.pem -y > public.pub ===== Copy over Public Key ===== To enable passwordless login, you must copy over your public key to the other sever ssh-copy-id remote_username@server_ip_address ===== Ignore Warning ===== ssh -q -o "StrictHostKeyChecking no" admin@192.168.1.1 ===== ByPass Legacy Ciphers ===== I had to do this to access a Cisco switch. Add the following to the SSH command. -oKexAlgorithms=+diffie-hellman-group1-sha1 You can also add the following to ''.ssh/config'' Host x.x.x.x KexAlgorithms +diffie-hellman-group1-sha1 =====Unable to Negotiate ===== I found the following when trying to SSH from Ubuntu 22.04.4 to Palo Alto Networks Firewall running PAN-OS 11.0.0 Unable to negotiate with port 22: no matching host key type found. Their offer: ssh-rsa,ssh-rsa,ssh-rsa To make it work, I had to add the following at the end of the SSH command in Ubuntu -o HostKeyAlgorithms=+ssh-rsa -o PubkeyAcceptedAlgorithms=+ssh-rsa