Table of Contents
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 <IP> 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
