====== OpenSSH ======
===== connect to server =====
ssh -p port user@server
=== allocate new TTY/shell, don't execute bashrc/profile ===
ssh -t username@hostname /bin/sh
=== don't use keys ===
ssh user@server -o PreferredAuthentications=keyboard-interactive
# or:
ssh user@server -o PreferredAuthentications=password
=== disable the ssh agent ===
export SSH_AUTH_SOCK=""; ssh user@server
===== Key handling =====
Never disclose your //private key// (also called //privkey//) to anybody! It's __private__. A //public key// (also called //pubkey//) is used to identify you on a remote system and you can copy it to any system you want to authenticate with.
==== generate private/public key pair ====
ssh-keygen -t ed25519 -f ~/.ssh/new_key
You will find two files in your ''~/.ssh/'' directory: ''new_key'' (your private key) and ''new_key.pub'' (your public key).
==== generate pubkey from private key ====
ssh-keygen -y -f ~/.ssh/id_rsa > ~/.ssh/id_rsa.pub
==== remove trusted host key (e.g. if offending host key was detected) ====
ssh-keygen -f ".ssh/known_hosts" -R servername/ip
===== Configuration =====
==== Client ====
Host arbitraryhostname
HostName realhostnameorIPhere
User usernamehere
Port 12345
more ideas: http://nerderati.com/2011/03/17/simplify-your-life-with-an-ssh-config-file/
=== password-less authentication ===
* Standard key is ''~/.ssh/id_rsa.pub''
* copy with ''ssh-copy-id user@server:port''
* ssh-copy-id script: https://gist.github.com/vamf12/1639381
* Alternative: cat ~/.ssh/id_rsa.pub | ssh user@server "mkdir ~/.ssh; cat >> ~/.ssh/authorized_keys"
==== Server ====
Port 12345
#ListenAddress ::
#ListenAddress 0.0.0.0
Protocol 2
HostKey /etc/ssh/ssh_host_rsa_key
HostKey /etc/ssh/ssh_host_dsa_key
HostKey /etc/ssh/ssh_host_ecdsa_key
UsePrivilegeSeparation yes
KeyRegenerationInterval 3600
ServerKeyBits 768
SyslogFacility AUTH
LogLevel INFO
LoginGraceTime 60
PermitRootLogin without-password
StrictModes yes
RSAAuthentication yes
PubkeyAuthentication yes
#AuthorizedKeysFile %h/.ssh/authorized_keys
IgnoreRhosts yes
RhostsRSAAuthentication no
# similar for protocol version 2
HostbasedAuthentication no
#IgnoreUserKnownHosts yes
PermitEmptyPasswords no
ChallengeResponseAuthentication no
#PasswordAuthentication yes
X11Forwarding yes
X11DisplayOffset 10
PrintMotd no
PrintLastLog yes
TCPKeepAlive yes
#UseLogin no
#MaxStartups 10:30:60
#Banner /etc/issue.net
AcceptEnv LANG LC_*
Subsystem sftp /usr/lib/openssh/sftp-server
UsePAM yes
=== Security ===
* use `sshguard` instead of `fail2ban`
=== SFTP ===
Subsystem sftp internal-sftp
Match Group sftponly
ForceCommand internal-sftp
ChrootDirectory /wwwhome
The ChrootDirectory __must__ have ''chmod 750'' and permissions of ''root:sftponly''!
===== Tunnel =====
If you want to connect to target computer on the target port of your SSH computer through localhost:
ssh -L 8888:targetcomputer:targetport ssh-computername -N
With ''ssh -L 8888:webserver:80 dmz-server -N'' you can make a ''webserver'' which is only available in the destination network available on ''localhost:8888''.
If you want to reverse tunnel a connection (i.e. make the destination port available to connect from the outside), you can use
ssh -o "GatewayPorts=yes" -L 80:localhost:8080 destination -N
This will forward the remote port 8080 to the local 80. Keep in mind you also have to open the firewall on the remote machine.
===== Pipes =====
You can pipe to/from SSH. ([[http://linux.icydog.net/ssh/piping.php|Quelle]])
=== remote to local ===
ssh user@server 'echo 0' | cat - > echo.out
=== local to remote ===
echo 0 | ssh user@server 'cat - > echo.out'
===== Software =====
==== GNU/Linux ====
The command-line tool ''ssh'' should be installed already. If it isn't, consult your package manager and install the OpenSSH package.
==== Windows ====
see [[..:..:windows:ssh|SSH on Windows]] wiki page
===== Troubleshooting =====
==== ssh connection doesn't close on shutdown ====
If your SSH session doesn't close on reboot or shutting down, you might lack a timeout in the OpenSSHd config or the corresponding systemd package so the session gets closed cleanly.
=== remedy 1: install libpam-systemd ===
Debian:
apt install libpam-systemd dbus
Check that you actually use the PAM module:
UsePAM=yes
=== remedy 2: enable sshd session cleanup ===
cp /usr/share/doc/openssh-client/examples/ssh-session-cleanup.service /etc/systemd/system/
systemctl enable ssh-session-cleanup.service
=== remedy 3: set a timeout in your client ===
Host *
ServerAliveInterval 15
ServerAliveCountMax 5