Difference between revisions of "SSH config"

From Noah.org
Jump to navigationJump to search
m
Line 35: Line 35:
 
# Replace "user1 user2 user3" with a list of users to allow.
 
# Replace "user1 user2 user3" with a list of users to allow.
 
#AllowUsers user1 user2 user3
 
#AllowUsers user1 user2 user3
 +
 +
# Allow client to pass locale environment variables.
 +
# This adds GIT_* to the default.
 +
AcceptEnv LANG LC_* GIT_*
 +
 
</pre>
 
</pre>
  

Revision as of 00:00, 19 January 2010


SSH config tweaks

Most default SSH installations need a little tweaking for speed or extra security. There are two config files of interest. One is for the SSH server on the host accepting connections and the other is for the SSH client on your localhost.

Server side: /etc/ssh/sshd_config

These are changes I always make to /etc/ssh/sshd_config. See also fail2ban for protecting against scripts doing dictionary attacks.

# This speeds up logins.
UseDNS no
# TCPKeepAlive is dumb, but we might as well turn it on.
# The ClientAlive settings are probably closer to 
# what most people expect when they think of "keep alive".
TCPKeepAlive yes
# Client Alive messages are sent over the encrypted link, so they
# cannot be blocked or spoofed by a firewall. These settings tell
# the server to check the client every 30 seconds. If the client
# does not respond 4 times in a row then the session is closed.
# This allows for up to 2 minutes of network interruption.
ClientAliveCountMax 4
ClientAliveInterval 30

# Do not set MaxAuthTries to '''1''' because SSH first tries
# public key authentication which counts against the number
# of failed tries, so if the key fails then sshd will disconnect
# and never attempt to ask for a password.
MaxAuthTries 2
# Bot scripts often check these accounts for weak passwords:
DenyUsers root test admin guest nobody www www-data
# For extra security, allow access only to specific users.
# Replace "user1 user2 user3" with a list of users to allow.
#AllowUsers user1 user2 user3

# Allow client to pass locale environment variables.
# This adds GIT_* to the default.
AcceptEnv LANG LC_* GIT_*

Use the following to support SSH1 only if you need it. SSH1 is ancient history and should be avoided. Unless you know you need this then you don't need this.

# this is required if you want to support SSH1
Protocol 2,1
# this is required if you want to support SSH1
PasswordAuthentication yes

Client side: /etc/ssh/ssh_config or ~/.ssh/config

Edit the client SSH config if you are getting slow logins. This is usually caused by GSSAPI Authentication.

Host *
# This fixes slow logins. Don't use this if you use Kerberos or GSSAPI.
GSSAPIAuthentication no
# This helps prevent timeout disconnects.
TCPKeepAlive yes
ServerAliveInterval 60
# Allow agent authentication to chain through more than one server.
ForwardAgent yes
# This is equivalent to -X `ssh` option -- limited X11.
ForwardX11 yes
# This is equivalent to -Y `ssh` option -- unlimited X11.
#ForwardX11Trusted yes
# These settings are equivalent to the ClientAlive* settings on the server.
ServerAliveCountMax 4
ServerAliveInterval 30

Remote Server Security Enhancement with SSH Keys

You can make port forwarding even more secure by limiting what a privileged account can do. When you add a key to the authorized_keys file you may add parameters to limit what clients using that key are allowed to do. The following example allows the client to create only IMAP tunnels. On the remote server add the following to ~username/.ssh/authorized_keys:

from="192.168.1.69",command="/bin/false",no-pty,no-X11-forwarding,no-agent-forwarding,no-port-forwarding,permitopen="localhost:143"
ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEA8XIr8LEXdvc4VZEvNenWkJrerTzNhqTT7QvCD+Y2EjCUPQwfBcSnvhY3oasNigNonghQFqm7/HqWBLpcN+4mqDUrXrEdj6HQmHvCV6WozNUVb5jjiyQ/JF4hqcQd6oelCkVw8wD32I2jlYqydpqOGY4xqakWDAfm3SOx5il3Kl49mKCg5B3GQPexhTujaTT3y/Q1eeT3zGpHE9Mp7k20X8rMxSjp5ncLAmdf42fRh05HY5f1GrupQIEdi0/TDcPNWL1ml89zttrDOLgDnwny7P0x2jmcX41cSxL/8svER7BAk2sroyQe6L21pJ7o2MYz1IwnsQgji/GjJoaA7hTNCQ== username@client.example.com

This is what each parameter means:

  • from="192.168.1.69": accept connection only from the given IP address
  • command="/bin/false": force this command to be run -- ignore what is requested by the client
  • no-pty: never allocate a PTY for interactivity
  • no-X11-forwarding: No X11
  • no-agent-forwarding: we don't want or need ssh-agent
  • no-port-forwarding: prevent ssh -R ..., but not sss -L ...
  • permitopen="localhost:143": allow only localhost connections to port 143 for `ssh -L` requests