# insecure
Host insecure insecure.example.com
HostName insecure.example.com
# bastion
Host bastion bastion.example.com
HostName bastion.example.com
ForwardAgent yes
ControlMaster auto
# production
Host prod production prod*.example.com
HostName production.example.com
ForwardAgent yes
ProxyCommand ssh -q bastion nc -w30 %h %p
# global defaults
Host *
ControlPath ~/.ssh/master-%r@%h:%p
ServerAliveCountMax 18
ServerAliveInterval 5
TCPKeepAlive no
User arthur
This section is for a server on the Internet that we think is insecure (we do not trust the administrators--those with root access).
# insecure
Host insecure insecure.example.com
HostName insecure.example.com
# insecureis a comment. It helps provide context for for the line that follows it.Host insecure insecure.example.comindicates the host patterns that the subsequent parameters apply to. All of the following will work to connect to the configured HostName:ssh insecuressh insecure.example.com
HostName insecure.example.comspecifies the real host name to log into.
Additionally, the following defaults are important. The parameter is not in this section because the default value is appropriate. It should be acknowledged so that it is not unintentionally superseded by a configured parameter:
ForwardAgent nospecifies that the authentication agent will not be forwarded. This prevents administrators on untrusted remote servers from masquerading as you on any system on which you have your SSH public key. See SSH Agent Hijacking for more information.
This section is for a server on the Internet that acts as a SSH bastion. It provides access to servers behind a firewall.
# bastion
Host bastion bastion.example.com
HostName bastion.example.com
ControlMaster auto
ControlPath ~/.ssh/master-%r@%h:%p
# bastionis a comment. It helps provide context for for the line that follows it.Host bastion bastion.example.comindicates the host patterns that the subsequent paramters apply to. All of the following will work to connect to the configured HostName:ssh bastionssh bastion.example.com
HostName bastion.example.comspecifies the real host name to log into.ForwardAgent yesspecifies that the authentication agent will be forwarded to the remote server.- This is important for the bastion server as it allows public key sessions from the bastion to other servers (especially those behind the firewall). This means you will be able to connect to those servers without a password.
ControlMaster autoindicates SSH should listen for connections on a control socket. Additional sessions can connect to this socket and reuse the master instances (bastion's) network connection rather than initiating a new one.
This section is for a server on the Internet that acts as a SSH production. It provides access to servers behind a firewall.
# production
Host prod production prod*.example.com
HostName production.example.com
ForwardAgent yes
ProxyCommand ssh -q bastion nc -w30 %h %p
# productionis a comment. It helps provide context for for the line that follows it.Host prod production prod*.example.comindicates the host patterns that the subsequent parameters apply to. All of the following will work to connect to the configured HostName:ssh prodssh productionssh prod.example.comssh production.example.com
HostName production.example.comspecifies the real host name to log into.ForwardAgent yesspecifies that the authentication agent will be forwarded to the remote server.- This is important for the production server as it allows public key sessions from the production server to other servers (especially source code repository servers).
ProxyCommand ssh -q bastion nc -w30 %h %pspecifies the command to use to connect to the server.- This allows the connections to servers behind the firewall using the bastion server as a proxy. Any SSH client (ex. ssh command line, svn, Transmit) will see the production session as a single connection. It just works!
The global defaults for all hosts is specified last. Its parameters apply if they are not previously defined (which is why it should be the last section of your SSH config).
# global defaults
Host *
ForwardAgent no
ServerAliveCountMax 18
ServerAliveInterval 5
TCPKeepAlive no
User arthur
# global defaultsis a comment. It helps provide context for for the line that follows it.Host *indicates this is the global defaults section.ControlPath ~/.ssh/master-%r@%h:%psupports the ControlMaster parameter. See ssh_config(5) OS X Manual Page if you are really curious.ServerAliveCountMax 18helps ensure robust proxied sessions. See ssh_config(5) OS X Manual Page if you are really curious.ServerAliveInterval 5helps ensure robust proxied sessions. See ssh_config(5) OS X Manual Page if you are really curious.TCPKeepAlive noallows connections to weather short network outages (especially useful when connected via WiFi).User arthurspecifies the user to log in as (remember, in our example the local username is arthurdent).
Additionally, the following defaults are important. The parameter is not in this section because the default value is appropriate. It should be acknowledged so that it is not unintentionally superseded by a configured parameter:
ForwardAgent nospecifies that the authentication agent will not be forwarded. This prevents administrators on untrusted remote servers from masquerading as you on any system on which you have your SSH public key. See SSH Agent Hijacking for more information.