ssh - bunnyamin/bunnix GitHub Wiki
- /etc/ssh/sshd_config
-
sshd -t"Test mode. Only check the validity of the configuration file and sanity of the keys. This is useful for updating SSHD reliably as configuration options may change.".
Keep connection alive; prevent freezing.
# On server `/etc/ssh/sshd_config`
TCPKeepAlive yes
ClientAliveInterval 500
ClientAliveCountMax 1000
# On client `~/.ssh/ssh_config`
Host *
ServerAliveInterval 100
If the value of ClientAliveInterval is greater than ServerAliveInterval then
the server sends messages to the client console.
- The user home directory should not allow write permission for group "other"
chmod go-w - The directory
.sshshould be700 - The file
.ssh/authorized_keysshould be600 - The private key files should be
600
/lib/systemd/system/sshd.service
The systemctl enable sshd.socket only invokes SSH when a connection is
attempted to be established. As described in Arch Linux Wiki article on SSH
OpenSSH 8.0p1-3 has removed support for the
/systemd/system/sshd.socketdue to it being susceptible to denial of service.
| Event | Error | Cause | Remedy |
|---|---|---|---|
| Starting service | Bind to port <PORT> on <IP> failed: Cannot assign requested address. |
The IP address is not available. | Wait for the network to assign an IP or allow non-local addresses. Answer by phemmer to question sshd failed due to network not yet available. For example, in sshd.service change After=network.target to After=network-online.target. |
- An SSH tunnel via multiple hops
- SSH from A through B to C, using private key on B [closed]
- SSH Tips and why ProxyJump is awesome
- Configure the server
.ssh/sshd_config - Login to the user client account that is to use SSH on the server.
- Create file
.ssh/authorized_keysif it does not exist. - Create the key pairs if not using an existing key pair.
- Create file
- Add the user's public key to
~/.ssh/authorized_keysfor the user's account on the server.- If no terminal access to the server and the client at the same time:
ssh-copy-id -i ~/.ssh/pub/key user@<SERVER IP>
- If terminal access to the server and the client at the same time:
- Create or overwrite existing file
cat <PUBLIC KEY> > ~/.ssh/authorized_keys - Append to existing file
cat <PUBLIC KEY> >> ~/.ssh/authorized_keys - Open file and paste the public key into it. Each row represents a public key.
The format for each row is the same as the public key:
ssh-ed25519 <PUBLIC KEY> <COMMENT>
- Create or overwrite existing file
- If no terminal access to the server and the client at the same time:
- Ensure server keys are generated for each algorithm used.
- Directory
/etc/ssh/ - If one or more key types already exist, and is to be updated, remove them and
then re-generate new keys.
-
ssh-keygen -Aorsystemctl restart sshdgenkeys.service
-
- Print the applicable server key. For example:
ssh-keygen -lf /etc/ssh/ssh_host_ed25519_key.pub
| Command | Example | Comment |
|---|---|---|
| Key, change password | $ ssh-keygen -p [-P old_passphrase] [-N new_passphrase] -f ~/<FILE> |
|
| Key, copy to server |
$ ssh-copy-id -n -i ~/<FILE> -p <PORT> <USER>@<IP, DOMAIN NAME>. |
|
| Key, generate ED25519 | $ ssh-keygen -t ed25519 -C "<COMMENT>" -f "<FILE>" |
ED25519 when backward compatibility is not required. |
| Key, generate fingerprint | ssh-keygen -lf ~/.ssh/key.pub |
|
| Key, generate public key from private key | Read a private OpenSSH format file and print an OpenSSH public key to stdout ssh-keygen -y -f ~/.ssh/id_rsa > ~/.ssh/id_rsa.pub. |
|
| Key, generate RSA | $ ssh-keygen -t rsa -b 4096 -C "<COMMENT>" -f "<FILE>" |
RSA when backward compatibility is required. |
| Server keys, delete all | rm /etc/ssh/ssh_host_*_key* |
|
| Server keys, generate |
ssh-keygen -A or systemctl restart sshdgenkeys.service
|
Ensure permission is read-only to all keys stored locally:
$ chmod 400 <PRIVATE KEY>$ chmod 400 <PUBLIC KEY>
The keys could be read and write (6), but removed write in order to prevent accidentally overwriting.
-
Encrypted SOCKS tunnel
-TND -
$ chmod 700 ~/.ssh/
~/.ssh/config
Host user
HostName server.local
User user
Port 22
Connect: ssh user
~/.ssh/sshd_config
HashKnownHosts no
StrictHostKeyChecking yes
-
~/.ssh/authorized_hostschmod 400
- Verify server fingerprint
- Retrieve the server public key
ssh-keyscan -p <PORT> <SERVER>. - Retrieve the server fingerprint from the public key (OpenSSH >= 7.2)
ssh-keyscan -p <PORT> <SERVER> | ssh-keygen -lf -. - Add the server fingerprint to known hosts
~/.ssh/known_hosts:-
ssh-keyscan -H -p <PORT> <SERVER> >> ~/.ssh/known_hostsor - if
HashKnownHosts yesthen re-hash the known hostsssh-keygen -Hf ~/.ssh/known_hosts
-
- Retrieve the server public key
- Login to server. For example:
ssh [email protected] -p <PORT>ssh -F /<PATH TO ssh_config> -i /<PATH TO PRIVATE KEY> -p <PORT> <USER>@<IP, DOMAIN NAME>ssh <NAME DEFINED IN ~/.ssh/config>
Destination must have permission of user@<IP>
scp -i .ssh/prv/user\@<IP> -P 49999 /path/to/local/file/to.copy user@<IP>:/home/user
sshfs -p <PORT> \
-F ~/.ssh/ssh_config \
-o debug \
-o IdentityFile=~/.ssh/prv/key \
-o UserKnownHostsFile=~/.ssh/known_hosts \
user@<IP>:/ \
/mnt/
Unmount:
fusermount -u /mnt/
Render a program on a remote server with no graphic output on a local client with graphic output.
ForwardX11 yes ~/.ssh/ssh_config on both local and remote computer.
SSH with -X or -Y
| test | example |
|---|---|
| Is SSH server port open? | $ nc -zv <IP> <PORT> |
| Event | Error | Cause | Remedy |
|---|---|---|---|
| Boot | Bind to port <PORT> on <IP> failed: Cannot assign requested address. |
The SSHD cannot assign the ListenAddress because the network routing is not set up. |
Remove the ListenAddress or set up network routing. |
| Connection | Authentication refused: bad ownership or modes for directory ... |
Modify the Permission for the directory. | |
mkdir: cannot create directory '.ssh': Permission denied |
The permission to and/or ownership of the directory to the user account or .ssh is restricted or does not belong to the user. |
||
sh: .ssh/authorized_keys: Permission denied) |
The permission to and/or ownership of the directory to the user account or .ssh is restricted or does not belong to the user. |
||
| copy key to server | Permission denied (publickey). | The server prevents PasswordAuthentication, which prevents remote login. If a user is to copy their key to their account then they must be able to log in to their account. |
Ensure that the username is a valid account on the server. For example. user@server. |
| login |
WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY!Someone could be eavesdropping on you right now (man-in-the-middle attack)!It is also possible that a host key has just been changed.The fingerprint for the ED25519 key sent by the remote host isSHA256:abcdef0123456789abcdef0123456789abcdef01234.Please contact your system administrator.Add correct host key in ~/.ssh/known_hosts to get rid of this message.Offending ECDSA key in ~/.ssh/known_hosts:4ED25519 host key for [<SERVER IP>]:<PORT> has changed and you have requested strict checking.Host key verification failed.
|
# ssh-keygen -R [<SERVER IP>]:<PORT> -> # Host [<SERVER IP>]:<PORT> found: line 4~/.ssh/known_hosts updated.Original contents retained as ~/.ssh/known_hosts.old
|
|
| login | Agent admitted failure to sign using the key.<br/>debug1: No more authentication methods to try.</br/>Permission denied (publickey). |
ssh -T <~/.ssh/config name, alias>, and make sure the IdentityFile path to the public key is correct. |
|
| login | No route to host. |
The server is down. For example, sleeping. |
Restart the server. |
ssh -p user@server |
Connection refused |
Ensure that the IP and port is not restricted in /etc/ssh/sshd_config and is not blocked by firewall rules. |