|  | SSH(1)                     OpenBSD Reference Manual                     SSH(1) | 
|  |  | 
|  | NAME | 
|  | ssh - OpenSSH SSH client (remote login program) | 
|  |  | 
|  | SYNOPSIS | 
|  | ssh [-1246AaCfgKkMNnqsTtVvXxYy] [-b bind_address] [-c cipher_spec] | 
|  | [-D [bind_address:]port] [-e escape_char] [-F configfile] [-I pkcs11] | 
|  | [-i identity_file] [-L [bind_address:]port:host:hostport] | 
|  | [-l login_name] [-m mac_spec] [-O ctl_cmd] [-o option] [-p port] | 
|  | [-R [bind_address:]port:host:hostport] [-S ctl_path] [-W host:port] | 
|  | [-w local_tun[:remote_tun]] [user@]hostname [command] | 
|  |  | 
|  | DESCRIPTION | 
|  | ssh (SSH client) is a program for logging into a remote machine and for | 
|  | executing commands on a remote machine.  It is intended to replace rlogin | 
|  | and rsh, and provide secure encrypted communications between two | 
|  | untrusted hosts over an insecure network.  X11 connections and arbitrary | 
|  | TCP ports can also be forwarded over the secure channel. | 
|  |  | 
|  | ssh connects and logs into the specified hostname (with optional user | 
|  | name).  The user must prove his/her identity to the remote machine using | 
|  | one of several methods depending on the protocol version used (see | 
|  | below). | 
|  |  | 
|  | If command is specified, it is executed on the remote host instead of a | 
|  | login shell. | 
|  |  | 
|  | The options are as follows: | 
|  |  | 
|  | -1      Forces ssh to try protocol version 1 only. | 
|  |  | 
|  | -2      Forces ssh to try protocol version 2 only. | 
|  |  | 
|  | -4      Forces ssh to use IPv4 addresses only. | 
|  |  | 
|  | -6      Forces ssh to use IPv6 addresses only. | 
|  |  | 
|  | -A      Enables forwarding of the authentication agent connection.  This | 
|  | can also be specified on a per-host basis in a configuration | 
|  | file. | 
|  |  | 
|  | Agent forwarding should be enabled with caution.  Users with the | 
|  | ability to bypass file permissions on the remote host (for the | 
|  | agent's UNIX-domain socket) can access the local agent through | 
|  | the forwarded connection.  An attacker cannot obtain key material | 
|  | from the agent, however they can perform operations on the keys | 
|  | that enable them to authenticate using the identities loaded into | 
|  | the agent. | 
|  |  | 
|  | -a      Disables forwarding of the authentication agent connection. | 
|  |  | 
|  | -b bind_address | 
|  | Use bind_address on the local machine as the source address of | 
|  | the connection.  Only useful on systems with more than one | 
|  | address. | 
|  |  | 
|  | -C      Requests compression of all data (including stdin, stdout, | 
|  | stderr, and data for forwarded X11 and TCP connections).  The | 
|  | compression algorithm is the same used by gzip(1), and the | 
|  | ``level'' can be controlled by the CompressionLevel option for | 
|  | protocol version 1.  Compression is desirable on modem lines and | 
|  | other slow connections, but will only slow down things on fast | 
|  | networks.  The default value can be set on a host-by-host basis | 
|  | in the configuration files; see the Compression option. | 
|  |  | 
|  | -c cipher_spec | 
|  | Selects the cipher specification for encrypting the session. | 
|  |  | 
|  | Protocol version 1 allows specification of a single cipher.  The | 
|  | supported values are ``3des'', ``blowfish'', and ``des''.  3des | 
|  | (triple-des) is an encrypt-decrypt-encrypt triple with three | 
|  | different keys.  It is believed to be secure.  blowfish is a fast | 
|  | block cipher; it appears very secure and is much faster than | 
|  | 3des.  des is only supported in the ssh client for | 
|  | interoperability with legacy protocol 1 implementations that do | 
|  | not support the 3des cipher.  Its use is strongly discouraged due | 
|  | to cryptographic weaknesses.  The default is ``3des''. | 
|  |  | 
|  | For protocol version 2, cipher_spec is a comma-separated list of | 
|  | ciphers listed in order of preference.  See the Ciphers keyword | 
|  | in ssh_config(5) for more information. | 
|  |  | 
|  | -D [bind_address:]port | 
|  | Specifies a local ``dynamic'' application-level port forwarding. | 
|  | This works by allocating a socket to listen to port on the local | 
|  | side, optionally bound to the specified bind_address.  Whenever a | 
|  | connection is made to this port, the connection is forwarded over | 
|  | the secure channel, and the application protocol is then used to | 
|  | determine where to connect to from the remote machine.  Currently | 
|  | the SOCKS4 and SOCKS5 protocols are supported, and ssh will act | 
|  | as a SOCKS server.  Only root can forward privileged ports. | 
|  | Dynamic port forwardings can also be specified in the | 
|  | configuration file. | 
|  |  | 
|  | IPv6 addresses can be specified by enclosing the address in | 
|  | square brackets.  Only the superuser can forward privileged | 
|  | ports.  By default, the local port is bound in accordance with | 
|  | the GatewayPorts setting.  However, an explicit bind_address may | 
|  | be used to bind the connection to a specific address.  The | 
|  | bind_address of ``localhost'' indicates that the listening port | 
|  | be bound for local use only, while an empty address or `*' | 
|  | indicates that the port should be available from all interfaces. | 
|  |  | 
|  | -e escape_char | 
|  | Sets the escape character for sessions with a pty (default: `~'). | 
|  | The escape character is only recognized at the beginning of a | 
|  | line.  The escape character followed by a dot (`.') closes the | 
|  | connection; followed by control-Z suspends the connection; and | 
|  | followed by itself sends the escape character once.  Setting the | 
|  | character to ``none'' disables any escapes and makes the session | 
|  | fully transparent. | 
|  |  | 
|  | -F configfile | 
|  | Specifies an alternative per-user configuration file.  If a | 
|  | configuration file is given on the command line, the system-wide | 
|  | configuration file (/etc/ssh/ssh_config) will be ignored.  The | 
|  | default for the per-user configuration file is ~/.ssh/config. | 
|  |  | 
|  | -f      Requests ssh to go to background just before command execution. | 
|  | This is useful if ssh is going to ask for passwords or | 
|  | passphrases, but the user wants it in the background.  This | 
|  | implies -n.  The recommended way to start X11 programs at a | 
|  | remote site is with something like ssh -f host xterm. | 
|  |  | 
|  | If the ExitOnForwardFailure configuration option is set to | 
|  | ``yes'', then a client started with -f will wait for all remote | 
|  | port forwards to be successfully established before placing | 
|  | itself in the background. | 
|  |  | 
|  | -g      Allows remote hosts to connect to local forwarded ports. | 
|  |  | 
|  | -I pkcs11 | 
|  | Specify the PKCS#11 shared library ssh should use to communicate | 
|  | with a PKCS#11 token providing the user's private RSA key. | 
|  |  | 
|  | -i identity_file | 
|  | Selects a file from which the identity (private key) for public | 
|  | key authentication is read.  The default is ~/.ssh/identity for | 
|  | protocol version 1, and ~/.ssh/id_dsa, ~/.ssh/id_ecdsa and | 
|  | ~/.ssh/id_rsa for protocol version 2.  Identity files may also be | 
|  | specified on a per-host basis in the configuration file.  It is | 
|  | possible to have multiple -i options (and multiple identities | 
|  | specified in configuration files).  ssh will also try to load | 
|  | certificate information from the filename obtained by appending | 
|  | -cert.pub to identity filenames. | 
|  |  | 
|  | -K      Enables GSSAPI-based authentication and forwarding (delegation) | 
|  | of GSSAPI credentials to the server. | 
|  |  | 
|  | -k      Disables forwarding (delegation) of GSSAPI credentials to the | 
|  | server. | 
|  |  | 
|  | -L [bind_address:]port:host:hostport | 
|  | Specifies that the given port on the local (client) host is to be | 
|  | forwarded to the given host and port on the remote side.  This | 
|  | works by allocating a socket to listen to port on the local side, | 
|  | optionally bound to the specified bind_address.  Whenever a | 
|  | connection is made to this port, the connection is forwarded over | 
|  | the secure channel, and a connection is made to host port | 
|  | hostport from the remote machine.  Port forwardings can also be | 
|  | specified in the configuration file.  IPv6 addresses can be | 
|  | specified by enclosing the address in square brackets.  Only the | 
|  | superuser can forward privileged ports.  By default, the local | 
|  | port is bound in accordance with the GatewayPorts setting. | 
|  | However, an explicit bind_address may be used to bind the | 
|  | connection to a specific address.  The bind_address of | 
|  | ``localhost'' indicates that the listening port be bound for | 
|  | local use only, while an empty address or `*' indicates that the | 
|  | port should be available from all interfaces. | 
|  |  | 
|  | -l login_name | 
|  | Specifies the user to log in as on the remote machine.  This also | 
|  | may be specified on a per-host basis in the configuration file. | 
|  |  | 
|  | -M      Places the ssh client into ``master'' mode for connection | 
|  | sharing.  Multiple -M options places ssh into ``master'' mode | 
|  | with confirmation required before slave connections are accepted. | 
|  | Refer to the description of ControlMaster in ssh_config(5) for | 
|  | details. | 
|  |  | 
|  | -m mac_spec | 
|  | Additionally, for protocol version 2 a comma-separated list of | 
|  | MAC (message authentication code) algorithms can be specified in | 
|  | order of preference.  See the MACs keyword for more information. | 
|  |  | 
|  | -N      Do not execute a remote command.  This is useful for just | 
|  | forwarding ports (protocol version 2 only). | 
|  |  | 
|  | -n      Redirects stdin from /dev/null (actually, prevents reading from | 
|  | stdin).  This must be used when ssh is run in the background.  A | 
|  | common trick is to use this to run X11 programs on a remote | 
|  | machine.  For example, ssh -n shadows.cs.hut.fi emacs & will | 
|  | start an emacs on shadows.cs.hut.fi, and the X11 connection will | 
|  | be automatically forwarded over an encrypted channel.  The ssh | 
|  | program will be put in the background.  (This does not work if | 
|  | ssh needs to ask for a password or passphrase; see also the -f | 
|  | option.) | 
|  |  | 
|  | -O ctl_cmd | 
|  | Control an active connection multiplexing master process.  When | 
|  | the -O option is specified, the ctl_cmd argument is interpreted | 
|  | and passed to the master process.  Valid commands are: ``check'' | 
|  | (check that the master process is running), ``forward'' (request | 
|  | forwardings without command execution), ``cancel'' (cancel | 
|  | forwardings), ``exit'' (request the master to exit), and ``stop'' | 
|  | (request the master to stop accepting further multiplexing | 
|  | requests). | 
|  |  | 
|  | -o option | 
|  | Can be used to give options in the format used in the | 
|  | configuration file.  This is useful for specifying options for | 
|  | which there is no separate command-line flag.  For full details | 
|  | of the options listed below, and their possible values, see | 
|  | ssh_config(5). | 
|  |  | 
|  | AddressFamily | 
|  | BatchMode | 
|  | BindAddress | 
|  | ChallengeResponseAuthentication | 
|  | CheckHostIP | 
|  | Cipher | 
|  | Ciphers | 
|  | ClearAllForwardings | 
|  | Compression | 
|  | CompressionLevel | 
|  | ConnectionAttempts | 
|  | ConnectTimeout | 
|  | ControlMaster | 
|  | ControlPath | 
|  | ControlPersist | 
|  | DynamicForward | 
|  | EscapeChar | 
|  | ExitOnForwardFailure | 
|  | ForwardAgent | 
|  | ForwardX11 | 
|  | ForwardX11Timeout | 
|  | ForwardX11Trusted | 
|  | GatewayPorts | 
|  | GlobalKnownHostsFile | 
|  | GSSAPIAuthentication | 
|  | GSSAPIDelegateCredentials | 
|  | HashKnownHosts | 
|  | Host | 
|  | HostbasedAuthentication | 
|  | HostKeyAlgorithms | 
|  | HostKeyAlias | 
|  | HostName | 
|  | IdentityFile | 
|  | IdentitiesOnly | 
|  | IPQoS | 
|  | KbdInteractiveAuthentication | 
|  | KbdInteractiveDevices | 
|  | KexAlgorithms | 
|  | LocalCommand | 
|  | LocalForward | 
|  | LogLevel | 
|  | MACs | 
|  | NoHostAuthenticationForLocalhost | 
|  | NumberOfPasswordPrompts | 
|  | PasswordAuthentication | 
|  | PermitLocalCommand | 
|  | PKCS11Provider | 
|  | Port | 
|  | PreferredAuthentications | 
|  | Protocol | 
|  | ProxyCommand | 
|  | PubkeyAuthentication | 
|  | RekeyLimit | 
|  | RemoteForward | 
|  | RequestTTY | 
|  | RhostsRSAAuthentication | 
|  | RSAAuthentication | 
|  | SendEnv | 
|  | ServerAliveInterval | 
|  | ServerAliveCountMax | 
|  | StrictHostKeyChecking | 
|  | TCPKeepAlive | 
|  | Tunnel | 
|  | TunnelDevice | 
|  | UsePrivilegedPort | 
|  | User | 
|  | UserKnownHostsFile | 
|  | VerifyHostKeyDNS | 
|  | VisualHostKey | 
|  | XAuthLocation | 
|  |  | 
|  | -p port | 
|  | Port to connect to on the remote host.  This can be specified on | 
|  | a per-host basis in the configuration file. | 
|  |  | 
|  | -q      Quiet mode.  Causes most warning and diagnostic messages to be | 
|  | suppressed. | 
|  |  | 
|  | -R [bind_address:]port:host:hostport | 
|  | Specifies that the given port on the remote (server) host is to | 
|  | be forwarded to the given host and port on the local side.  This | 
|  | works by allocating a socket to listen to port on the remote | 
|  | side, and whenever a connection is made to this port, the | 
|  | connection is forwarded over the secure channel, and a connection | 
|  | is made to host port hostport from the local machine. | 
|  |  | 
|  | Port forwardings can also be specified in the configuration file. | 
|  | Privileged ports can be forwarded only when logging in as root on | 
|  | the remote machine.  IPv6 addresses can be specified by enclosing | 
|  | the address in square braces. | 
|  |  | 
|  | By default, the listening socket on the server will be bound to | 
|  | the loopback interface only.  This may be overridden by | 
|  | specifying a bind_address.  An empty bind_address, or the address | 
|  | `*', indicates that the remote socket should listen on all | 
|  | interfaces.  Specifying a remote bind_address will only succeed | 
|  | if the server's GatewayPorts option is enabled (see | 
|  | sshd_config(5)). | 
|  |  | 
|  | If the port argument is `0', the listen port will be dynamically | 
|  | allocated on the server and reported to the client at run time. | 
|  | When used together with -O forward the allocated port will be | 
|  | printed to the standard output. | 
|  |  | 
|  | -S ctl_path | 
|  | Specifies the location of a control socket for connection | 
|  | sharing, or the string ``none'' to disable connection sharing. | 
|  | Refer to the description of ControlPath and ControlMaster in | 
|  | ssh_config(5) for details. | 
|  |  | 
|  | -s      May be used to request invocation of a subsystem on the remote | 
|  | system.  Subsystems are a feature of the SSH2 protocol which | 
|  | facilitate the use of SSH as a secure transport for other | 
|  | applications (eg. sftp(1)).  The subsystem is specified as the | 
|  | remote command. | 
|  |  | 
|  | -T      Disable pseudo-tty allocation. | 
|  |  | 
|  | -t      Force pseudo-tty allocation.  This can be used to execute | 
|  | arbitrary screen-based programs on a remote machine, which can be | 
|  | very useful, e.g. when implementing menu services.  Multiple -t | 
|  | options force tty allocation, even if ssh has no local tty. | 
|  |  | 
|  | -V      Display the version number and exit. | 
|  |  | 
|  | -v      Verbose mode.  Causes ssh to print debugging messages about its | 
|  | progress.  This is helpful in debugging connection, | 
|  | authentication, and configuration problems.  Multiple -v options | 
|  | increase the verbosity.  The maximum is 3. | 
|  |  | 
|  | -W host:port | 
|  | Requests that standard input and output on the client be | 
|  | forwarded to host on port over the secure channel.  Implies -N, | 
|  | -T, ExitOnForwardFailure and ClearAllForwardings and works with | 
|  | Protocol version 2 only. | 
|  |  | 
|  | -w local_tun[:remote_tun] | 
|  | Requests tunnel device forwarding with the specified tun(4) | 
|  | devices between the client (local_tun) and the server | 
|  | (remote_tun). | 
|  |  | 
|  | The devices may be specified by numerical ID or the keyword | 
|  | ``any'', which uses the next available tunnel device.  If | 
|  | remote_tun is not specified, it defaults to ``any''.  See also | 
|  | the Tunnel and TunnelDevice directives in ssh_config(5).  If the | 
|  | Tunnel directive is unset, it is set to the default tunnel mode, | 
|  | which is ``point-to-point''. | 
|  |  | 
|  | -X      Enables X11 forwarding.  This can also be specified on a per-host | 
|  | basis in a configuration file. | 
|  |  | 
|  | X11 forwarding should be enabled with caution.  Users with the | 
|  | ability to bypass file permissions on the remote host (for the | 
|  | user's X authorization database) can access the local X11 display | 
|  | through the forwarded connection.  An attacker may then be able | 
|  | to perform activities such as keystroke monitoring. | 
|  |  | 
|  | For this reason, X11 forwarding is subjected to X11 SECURITY | 
|  | extension restrictions by default.  Please refer to the ssh -Y | 
|  | option and the ForwardX11Trusted directive in ssh_config(5) for | 
|  | more information. | 
|  |  | 
|  | -x      Disables X11 forwarding. | 
|  |  | 
|  | -Y      Enables trusted X11 forwarding.  Trusted X11 forwardings are not | 
|  | subjected to the X11 SECURITY extension controls. | 
|  |  | 
|  | -y      Send log information using the syslog(3) system module.  By | 
|  | default this information is sent to stderr. | 
|  |  | 
|  | ssh may additionally obtain configuration data from a per-user | 
|  | configuration file and a system-wide configuration file.  The file format | 
|  | and configuration options are described in ssh_config(5). | 
|  |  | 
|  | AUTHENTICATION | 
|  | The OpenSSH SSH client supports SSH protocols 1 and 2.  The default is to | 
|  | use protocol 2 only, though this can be changed via the Protocol option | 
|  | in ssh_config(5) or the -1 and -2 options (see above).  Both protocols | 
|  | support similar authentication methods, but protocol 2 is the default | 
|  | since it provides additional mechanisms for confidentiality (the traffic | 
|  | is encrypted using AES, 3DES, Blowfish, CAST128, or Arcfour) and | 
|  | integrity (hmac-md5, hmac-sha1, hmac-sha2-256, hmac-sha2-512, umac-64, | 
|  | hmac-ripemd160).  Protocol 1 lacks a strong mechanism for ensuring the | 
|  | integrity of the connection. | 
|  |  | 
|  | The methods available for authentication are: GSSAPI-based | 
|  | authentication, host-based authentication, public key authentication, | 
|  | challenge-response authentication, and password authentication. | 
|  | Authentication methods are tried in the order specified above, though | 
|  | protocol 2 has a configuration option to change the default order: | 
|  | PreferredAuthentications. | 
|  |  | 
|  | Host-based authentication works as follows: If the machine the user logs | 
|  | in from is listed in /etc/hosts.equiv or /etc/shosts.equiv on the remote | 
|  | machine, and the user names are the same on both sides, or if the files | 
|  | ~/.rhosts or ~/.shosts exist in the user's home directory on the remote | 
|  | machine and contain a line containing the name of the client machine and | 
|  | the name of the user on that machine, the user is considered for login. | 
|  | Additionally, the server must be able to verify the client's host key | 
|  | (see the description of /etc/ssh/ssh_known_hosts and ~/.ssh/known_hosts, | 
|  | below) for login to be permitted.  This authentication method closes | 
|  | security holes due to IP spoofing, DNS spoofing, and routing spoofing. | 
|  | [Note to the administrator: /etc/hosts.equiv, ~/.rhosts, and the | 
|  | rlogin/rsh protocol in general, are inherently insecure and should be | 
|  | disabled if security is desired.] | 
|  |  | 
|  | Public key authentication works as follows: The scheme is based on | 
|  | public-key cryptography, using cryptosystems where encryption and | 
|  | decryption are done using separate keys, and it is unfeasible to derive | 
|  | the decryption key from the encryption key.  The idea is that each user | 
|  | creates a public/private key pair for authentication purposes.  The | 
|  | server knows the public key, and only the user knows the private key. | 
|  | ssh implements public key authentication protocol automatically, using | 
|  | one of the DSA, ECDSA or RSA algorithms.  Protocol 1 is restricted to | 
|  | using only RSA keys, but protocol 2 may use any.  The HISTORY section of | 
|  | ssl(8) contains a brief discussion of the DSA and RSA algorithms. | 
|  |  | 
|  | The file ~/.ssh/authorized_keys lists the public keys that are permitted | 
|  | for logging in.  When the user logs in, the ssh program tells the server | 
|  | which key pair it would like to use for authentication.  The client | 
|  | proves that it has access to the private key and the server checks that | 
|  | the corresponding public key is authorized to accept the account. | 
|  |  | 
|  | The user creates his/her key pair by running ssh-keygen(1).  This stores | 
|  | the private key in ~/.ssh/identity (protocol 1), ~/.ssh/id_dsa (protocol | 
|  | 2 DSA), ~/.ssh/id_ecdsa (protocol 2 ECDSA), or ~/.ssh/id_rsa (protocol 2 | 
|  | RSA) and stores the public key in ~/.ssh/identity.pub (protocol 1), | 
|  | ~/.ssh/id_dsa.pub (protocol 2 DSA), ~/.ssh/id_ecdsa.pub (protocol 2 | 
|  | ECDSA), or ~/.ssh/id_rsa.pub (protocol 2 RSA) in the user's home | 
|  | directory.  The user should then copy the public key to | 
|  | ~/.ssh/authorized_keys in his/her home directory on the remote machine. | 
|  | The authorized_keys file corresponds to the conventional ~/.rhosts file, | 
|  | and has one key per line, though the lines can be very long.  After this, | 
|  | the user can log in without giving the password. | 
|  |  | 
|  | A variation on public key authentication is available in the form of | 
|  | certificate authentication: instead of a set of public/private keys, | 
|  | signed certificates are used.  This has the advantage that a single | 
|  | trusted certification authority can be used in place of many | 
|  | public/private keys.  See the CERTIFICATES section of ssh-keygen(1) for | 
|  | more information. | 
|  |  | 
|  | The most convenient way to use public key or certificate authentication | 
|  | may be with an authentication agent.  See ssh-agent(1) for more | 
|  | information. | 
|  |  | 
|  | Challenge-response authentication works as follows: The server sends an | 
|  | arbitrary "challenge" text, and prompts for a response.  Protocol 2 | 
|  | allows multiple challenges and responses; protocol 1 is restricted to | 
|  | just one challenge/response.  Examples of challenge-response | 
|  | authentication include BSD Authentication (see login.conf(5)) and PAM | 
|  | (some non-OpenBSD systems). | 
|  |  | 
|  | Finally, if other authentication methods fail, ssh prompts the user for a | 
|  | password.  The password is sent to the remote host for checking; however, | 
|  | since all communications are encrypted, the password cannot be seen by | 
|  | someone listening on the network. | 
|  |  | 
|  | ssh automatically maintains and checks a database containing | 
|  | identification for all hosts it has ever been used with.  Host keys are | 
|  | stored in ~/.ssh/known_hosts in the user's home directory.  Additionally, | 
|  | the file /etc/ssh/ssh_known_hosts is automatically checked for known | 
|  | hosts.  Any new hosts are automatically added to the user's file.  If a | 
|  | host's identification ever changes, ssh warns about this and disables | 
|  | password authentication to prevent server spoofing or man-in-the-middle | 
|  | attacks, which could otherwise be used to circumvent the encryption.  The | 
|  | StrictHostKeyChecking option can be used to control logins to machines | 
|  | whose host key is not known or has changed. | 
|  |  | 
|  | When the user's identity has been accepted by the server, the server | 
|  | either executes the given command, or logs into the machine and gives the | 
|  | user a normal shell on the remote machine.  All communication with the | 
|  | remote command or shell will be automatically encrypted. | 
|  |  | 
|  | If a pseudo-terminal has been allocated (normal login session), the user | 
|  | may use the escape characters noted below. | 
|  |  | 
|  | If no pseudo-tty has been allocated, the session is transparent and can | 
|  | be used to reliably transfer binary data.  On most systems, setting the | 
|  | escape character to ``none'' will also make the session transparent even | 
|  | if a tty is used. | 
|  |  | 
|  | The session terminates when the command or shell on the remote machine | 
|  | exits and all X11 and TCP connections have been closed. | 
|  |  | 
|  | ESCAPE CHARACTERS | 
|  | When a pseudo-terminal has been requested, ssh supports a number of | 
|  | functions through the use of an escape character. | 
|  |  | 
|  | A single tilde character can be sent as ~~ or by following the tilde by a | 
|  | character other than those described below.  The escape character must | 
|  | always follow a newline to be interpreted as special.  The escape | 
|  | character can be changed in configuration files using the EscapeChar | 
|  | configuration directive or on the command line by the -e option. | 
|  |  | 
|  | The supported escapes (assuming the default `~') are: | 
|  |  | 
|  | ~.      Disconnect. | 
|  |  | 
|  | ~^Z     Background ssh. | 
|  |  | 
|  | ~#      List forwarded connections. | 
|  |  | 
|  | ~&      Background ssh at logout when waiting for forwarded connection / | 
|  | X11 sessions to terminate. | 
|  |  | 
|  | ~?      Display a list of escape characters. | 
|  |  | 
|  | ~B      Send a BREAK to the remote system (only useful for SSH protocol | 
|  | version 2 and if the peer supports it). | 
|  |  | 
|  | ~C      Open command line.  Currently this allows the addition of port | 
|  | forwardings using the -L, -R and -D options (see above).  It also | 
|  | allows the cancellation of existing port-forwardings with | 
|  | -KL[bind_address:]port for local, -KR[bind_address:]port for | 
|  | remote and -KD[bind_address:]port for dynamic port-forwardings. | 
|  | !command allows the user to execute a local command if the | 
|  | PermitLocalCommand option is enabled in ssh_config(5).  Basic | 
|  | help is available, using the -h option. | 
|  |  | 
|  | ~R      Request rekeying of the connection (only useful for SSH protocol | 
|  | version 2 and if the peer supports it). | 
|  |  | 
|  | TCP FORWARDING | 
|  | Forwarding of arbitrary TCP connections over the secure channel can be | 
|  | specified either on the command line or in a configuration file.  One | 
|  | possible application of TCP forwarding is a secure connection to a mail | 
|  | server; another is going through firewalls. | 
|  |  | 
|  | In the example below, we look at encrypting communication between an IRC | 
|  | client and server, even though the IRC server does not directly support | 
|  | encrypted communications.  This works as follows: the user connects to | 
|  | the remote host using ssh, specifying a port to be used to forward | 
|  | connections to the remote server.  After that it is possible to start the | 
|  | service which is to be encrypted on the client machine, connecting to the | 
|  | same local port, and ssh will encrypt and forward the connection. | 
|  |  | 
|  | The following example tunnels an IRC session from client machine | 
|  | ``127.0.0.1'' (localhost) to remote server ``server.example.com'': | 
|  |  | 
|  | $ ssh -f -L 1234:localhost:6667 server.example.com sleep 10 | 
|  | $ irc -c '#users' -p 1234 pinky 127.0.0.1 | 
|  |  | 
|  | This tunnels a connection to IRC server ``server.example.com'', joining | 
|  | channel ``#users'', nickname ``pinky'', using port 1234.  It doesn't | 
|  | matter which port is used, as long as it's greater than 1023 (remember, | 
|  | only root can open sockets on privileged ports) and doesn't conflict with | 
|  | any ports already in use.  The connection is forwarded to port 6667 on | 
|  | the remote server, since that's the standard port for IRC services. | 
|  |  | 
|  | The -f option backgrounds ssh and the remote command ``sleep 10'' is | 
|  | specified to allow an amount of time (10 seconds, in the example) to | 
|  | start the service which is to be tunnelled.  If no connections are made | 
|  | within the time specified, ssh will exit. | 
|  |  | 
|  | X11 FORWARDING | 
|  | If the ForwardX11 variable is set to ``yes'' (or see the description of | 
|  | the -X, -x, and -Y options above) and the user is using X11 (the DISPLAY | 
|  | environment variable is set), the connection to the X11 display is | 
|  | automatically forwarded to the remote side in such a way that any X11 | 
|  | programs started from the shell (or command) will go through the | 
|  | encrypted channel, and the connection to the real X server will be made | 
|  | from the local machine.  The user should not manually set DISPLAY. | 
|  | Forwarding of X11 connections can be configured on the command line or in | 
|  | configuration files. | 
|  |  | 
|  | The DISPLAY value set by ssh will point to the server machine, but with a | 
|  | display number greater than zero.  This is normal, and happens because | 
|  | ssh creates a ``proxy'' X server on the server machine for forwarding the | 
|  | connections over the encrypted channel. | 
|  |  | 
|  | ssh will also automatically set up Xauthority data on the server machine. | 
|  | For this purpose, it will generate a random authorization cookie, store | 
|  | it in Xauthority on the server, and verify that any forwarded connections | 
|  | carry this cookie and replace it by the real cookie when the connection | 
|  | is opened.  The real authentication cookie is never sent to the server | 
|  | machine (and no cookies are sent in the plain). | 
|  |  | 
|  | If the ForwardAgent variable is set to ``yes'' (or see the description of | 
|  | the -A and -a options above) and the user is using an authentication | 
|  | agent, the connection to the agent is automatically forwarded to the | 
|  | remote side. | 
|  |  | 
|  | VERIFYING HOST KEYS | 
|  | When connecting to a server for the first time, a fingerprint of the | 
|  | server's public key is presented to the user (unless the option | 
|  | StrictHostKeyChecking has been disabled).  Fingerprints can be determined | 
|  | using ssh-keygen(1): | 
|  |  | 
|  | $ ssh-keygen -l -f /etc/ssh/ssh_host_rsa_key | 
|  |  | 
|  | If the fingerprint is already known, it can be matched and the key can be | 
|  | accepted or rejected.  Because of the difficulty of comparing host keys | 
|  | just by looking at hex strings, there is also support to compare host | 
|  | keys visually, using random art.  By setting the VisualHostKey option to | 
|  | ``yes'', a small ASCII graphic gets displayed on every login to a server, | 
|  | no matter if the session itself is interactive or not.  By learning the | 
|  | pattern a known server produces, a user can easily find out that the host | 
|  | key has changed when a completely different pattern is displayed. | 
|  | Because these patterns are not unambiguous however, a pattern that looks | 
|  | similar to the pattern remembered only gives a good probability that the | 
|  | host key is the same, not guaranteed proof. | 
|  |  | 
|  | To get a listing of the fingerprints along with their random art for all | 
|  | known hosts, the following command line can be used: | 
|  |  | 
|  | $ ssh-keygen -lv -f ~/.ssh/known_hosts | 
|  |  | 
|  | If the fingerprint is unknown, an alternative method of verification is | 
|  | available: SSH fingerprints verified by DNS.  An additional resource | 
|  | record (RR), SSHFP, is added to a zonefile and the connecting client is | 
|  | able to match the fingerprint with that of the key presented. | 
|  |  | 
|  | In this example, we are connecting a client to a server, | 
|  | ``host.example.com''.  The SSHFP resource records should first be added | 
|  | to the zonefile for host.example.com: | 
|  |  | 
|  | $ ssh-keygen -r host.example.com. | 
|  |  | 
|  | The output lines will have to be added to the zonefile.  To check that | 
|  | the zone is answering fingerprint queries: | 
|  |  | 
|  | $ dig -t SSHFP host.example.com | 
|  |  | 
|  | Finally the client connects: | 
|  |  | 
|  | $ ssh -o "VerifyHostKeyDNS ask" host.example.com | 
|  | [...] | 
|  | Matching host key fingerprint found in DNS. | 
|  | Are you sure you want to continue connecting (yes/no)? | 
|  |  | 
|  | See the VerifyHostKeyDNS option in ssh_config(5) for more information. | 
|  |  | 
|  | SSH-BASED VIRTUAL PRIVATE NETWORKS | 
|  | ssh contains support for Virtual Private Network (VPN) tunnelling using | 
|  | the tun(4) network pseudo-device, allowing two networks to be joined | 
|  | securely.  The sshd_config(5) configuration option PermitTunnel controls | 
|  | whether the server supports this, and at what level (layer 2 or 3 | 
|  | traffic). | 
|  |  | 
|  | The following example would connect client network 10.0.50.0/24 with | 
|  | remote network 10.0.99.0/24 using a point-to-point connection from | 
|  | 10.1.1.1 to 10.1.1.2, provided that the SSH server running on the gateway | 
|  | to the remote network, at 192.168.1.15, allows it. | 
|  |  | 
|  | On the client: | 
|  |  | 
|  | # ssh -f -w 0:1 192.168.1.15 true | 
|  | # ifconfig tun0 10.1.1.1 10.1.1.2 netmask 255.255.255.252 | 
|  | # route add 10.0.99.0/24 10.1.1.2 | 
|  |  | 
|  | On the server: | 
|  |  | 
|  | # ifconfig tun1 10.1.1.2 10.1.1.1 netmask 255.255.255.252 | 
|  | # route add 10.0.50.0/24 10.1.1.1 | 
|  |  | 
|  | Client access may be more finely tuned via the /root/.ssh/authorized_keys | 
|  | file (see below) and the PermitRootLogin server option.  The following | 
|  | entry would permit connections on tun(4) device 1 from user ``jane'' and | 
|  | on tun device 2 from user ``john'', if PermitRootLogin is set to | 
|  | ``forced-commands-only'': | 
|  |  | 
|  | tunnel="1",command="sh /etc/netstart tun1" ssh-rsa ... jane | 
|  | tunnel="2",command="sh /etc/netstart tun2" ssh-rsa ... john | 
|  |  | 
|  | Since an SSH-based setup entails a fair amount of overhead, it may be | 
|  | more suited to temporary setups, such as for wireless VPNs.  More | 
|  | permanent VPNs are better provided by tools such as ipsecctl(8) and | 
|  | isakmpd(8). | 
|  |  | 
|  | ENVIRONMENT | 
|  | ssh will normally set the following environment variables: | 
|  |  | 
|  | DISPLAY               The DISPLAY variable indicates the location of the | 
|  | X11 server.  It is automatically set by ssh to | 
|  | point to a value of the form ``hostname:n'', where | 
|  | ``hostname'' indicates the host where the shell | 
|  | runs, and `n' is an integer >= 1.  ssh uses this | 
|  | special value to forward X11 connections over the | 
|  | secure channel.  The user should normally not set | 
|  | DISPLAY explicitly, as that will render the X11 | 
|  | connection insecure (and will require the user to | 
|  | manually copy any required authorization cookies). | 
|  |  | 
|  | HOME                  Set to the path of the user's home directory. | 
|  |  | 
|  | LOGNAME               Synonym for USER; set for compatibility with | 
|  | systems that use this variable. | 
|  |  | 
|  | MAIL                  Set to the path of the user's mailbox. | 
|  |  | 
|  | PATH                  Set to the default PATH, as specified when | 
|  | compiling ssh. | 
|  |  | 
|  | SSH_ASKPASS           If ssh needs a passphrase, it will read the | 
|  | passphrase from the current terminal if it was run | 
|  | from a terminal.  If ssh does not have a terminal | 
|  | associated with it but DISPLAY and SSH_ASKPASS are | 
|  | set, it will execute the program specified by | 
|  | SSH_ASKPASS and open an X11 window to read the | 
|  | passphrase.  This is particularly useful when | 
|  | calling ssh from a .xsession or related script. | 
|  | (Note that on some machines it may be necessary to | 
|  | redirect the input from /dev/null to make this | 
|  | work.) | 
|  |  | 
|  | SSH_AUTH_SOCK         Identifies the path of a UNIX-domain socket used to | 
|  | communicate with the agent. | 
|  |  | 
|  | SSH_CONNECTION        Identifies the client and server ends of the | 
|  | connection.  The variable contains four space- | 
|  | separated values: client IP address, client port | 
|  | number, server IP address, and server port number. | 
|  |  | 
|  | SSH_ORIGINAL_COMMAND  This variable contains the original command line if | 
|  | a forced command is executed.  It can be used to | 
|  | extract the original arguments. | 
|  |  | 
|  | SSH_TTY               This is set to the name of the tty (path to the | 
|  | device) associated with the current shell or | 
|  | command.  If the current session has no tty, this | 
|  | variable is not set. | 
|  |  | 
|  | TZ                    This variable is set to indicate the present time | 
|  | zone if it was set when the daemon was started | 
|  | (i.e. the daemon passes the value on to new | 
|  | connections). | 
|  |  | 
|  | USER                  Set to the name of the user logging in. | 
|  |  | 
|  | Additionally, ssh reads ~/.ssh/environment, and adds lines of the format | 
|  | ``VARNAME=value'' to the environment if the file exists and users are | 
|  | allowed to change their environment.  For more information, see the | 
|  | PermitUserEnvironment option in sshd_config(5). | 
|  |  | 
|  | FILES | 
|  | ~/.rhosts | 
|  | This file is used for host-based authentication (see above).  On | 
|  | some machines this file may need to be world-readable if the | 
|  | user's home directory is on an NFS partition, because sshd(8) | 
|  | reads it as root.  Additionally, this file must be owned by the | 
|  | user, and must not have write permissions for anyone else.  The | 
|  | recommended permission for most machines is read/write for the | 
|  | user, and not accessible by others. | 
|  |  | 
|  | ~/.shosts | 
|  | This file is used in exactly the same way as .rhosts, but allows | 
|  | host-based authentication without permitting login with | 
|  | rlogin/rsh. | 
|  |  | 
|  | ~/.ssh/ | 
|  | This directory is the default location for all user-specific | 
|  | configuration and authentication information.  There is no | 
|  | general requirement to keep the entire contents of this directory | 
|  | secret, but the recommended permissions are read/write/execute | 
|  | for the user, and not accessible by others. | 
|  |  | 
|  | ~/.ssh/authorized_keys | 
|  | Lists the public keys (DSA/ECDSA/RSA) that can be used for | 
|  | logging in as this user.  The format of this file is described in | 
|  | the sshd(8) manual page.  This file is not highly sensitive, but | 
|  | the recommended permissions are read/write for the user, and not | 
|  | accessible by others. | 
|  |  | 
|  | ~/.ssh/config | 
|  | This is the per-user configuration file.  The file format and | 
|  | configuration options are described in ssh_config(5).  Because of | 
|  | the potential for abuse, this file must have strict permissions: | 
|  | read/write for the user, and not accessible by others. | 
|  |  | 
|  | ~/.ssh/environment | 
|  | Contains additional definitions for environment variables; see | 
|  | ENVIRONMENT, above. | 
|  |  | 
|  | ~/.ssh/identity | 
|  | ~/.ssh/id_dsa | 
|  | ~/.ssh/id_ecdsa | 
|  | ~/.ssh/id_rsa | 
|  | Contains the private key for authentication.  These files contain | 
|  | sensitive data and should be readable by the user but not | 
|  | accessible by others (read/write/execute).  ssh will simply | 
|  | ignore a private key file if it is accessible by others.  It is | 
|  | possible to specify a passphrase when generating the key which | 
|  | will be used to encrypt the sensitive part of this file using | 
|  | 3DES. | 
|  |  | 
|  | ~/.ssh/identity.pub | 
|  | ~/.ssh/id_dsa.pub | 
|  | ~/.ssh/id_ecdsa.pub | 
|  | ~/.ssh/id_rsa.pub | 
|  | Contains the public key for authentication.  These files are not | 
|  | sensitive and can (but need not) be readable by anyone. | 
|  |  | 
|  | ~/.ssh/known_hosts | 
|  | Contains a list of host keys for all hosts the user has logged | 
|  | into that are not already in the systemwide list of known host | 
|  | keys.  See sshd(8) for further details of the format of this | 
|  | file. | 
|  |  | 
|  | ~/.ssh/rc | 
|  | Commands in this file are executed by ssh when the user logs in, | 
|  | just before the user's shell (or command) is started.  See the | 
|  | sshd(8) manual page for more information. | 
|  |  | 
|  | /etc/hosts.equiv | 
|  | This file is for host-based authentication (see above).  It | 
|  | should only be writable by root. | 
|  |  | 
|  | /etc/shosts.equiv | 
|  | This file is used in exactly the same way as hosts.equiv, but | 
|  | allows host-based authentication without permitting login with | 
|  | rlogin/rsh. | 
|  |  | 
|  | /etc/ssh/ssh_config | 
|  | Systemwide configuration file.  The file format and configuration | 
|  | options are described in ssh_config(5). | 
|  |  | 
|  | /etc/ssh/ssh_host_key | 
|  | /etc/ssh/ssh_host_dsa_key | 
|  | /etc/ssh/ssh_host_ecdsa_key | 
|  | /etc/ssh/ssh_host_rsa_key | 
|  | These three files contain the private parts of the host keys and | 
|  | are used for host-based authentication.  If protocol version 1 is | 
|  | used, ssh must be setuid root, since the host key is readable | 
|  | only by root.  For protocol version 2, ssh uses ssh-keysign(8) to | 
|  | access the host keys, eliminating the requirement that ssh be | 
|  | setuid root when host-based authentication is used.  By default | 
|  | ssh is not setuid root. | 
|  |  | 
|  | /etc/ssh/ssh_known_hosts | 
|  | Systemwide list of known host keys.  This file should be prepared | 
|  | by the system administrator to contain the public host keys of | 
|  | all machines in the organization.  It should be world-readable. | 
|  | See sshd(8) for further details of the format of this file. | 
|  |  | 
|  | /etc/ssh/sshrc | 
|  | Commands in this file are executed by ssh when the user logs in, | 
|  | just before the user's shell (or command) is started.  See the | 
|  | sshd(8) manual page for more information. | 
|  |  | 
|  | EXIT STATUS | 
|  | ssh exits with the exit status of the remote command or with 255 if an | 
|  | error occurred. | 
|  |  | 
|  | SEE ALSO | 
|  | scp(1), sftp(1), ssh-add(1), ssh-agent(1), ssh-keygen(1), ssh-keyscan(1), | 
|  | tun(4), hosts.equiv(5), ssh_config(5), ssh-keysign(8), sshd(8) | 
|  |  | 
|  | The Secure Shell (SSH) Protocol Assigned Numbers, RFC 4250, 2006. | 
|  |  | 
|  | The Secure Shell (SSH) Protocol Architecture, RFC 4251, 2006. | 
|  |  | 
|  | The Secure Shell (SSH) Authentication Protocol, RFC 4252, 2006. | 
|  |  | 
|  | The Secure Shell (SSH) Transport Layer Protocol, RFC 4253, 2006. | 
|  |  | 
|  | The Secure Shell (SSH) Connection Protocol, RFC 4254, 2006. | 
|  |  | 
|  | Using DNS to Securely Publish Secure Shell (SSH) Key Fingerprints, RFC | 
|  | 4255, 2006. | 
|  |  | 
|  | Generic Message Exchange Authentication for the Secure Shell Protocol | 
|  | (SSH), RFC 4256, 2006. | 
|  |  | 
|  | The Secure Shell (SSH) Session Channel Break Extension, RFC 4335, 2006. | 
|  |  | 
|  | The Secure Shell (SSH) Transport Layer Encryption Modes, RFC 4344, 2006. | 
|  |  | 
|  | Improved Arcfour Modes for the Secure Shell (SSH) Transport Layer | 
|  | Protocol, RFC 4345, 2006. | 
|  |  | 
|  | Diffie-Hellman Group Exchange for the Secure Shell (SSH) Transport Layer | 
|  | Protocol, RFC 4419, 2006. | 
|  |  | 
|  | The Secure Shell (SSH) Public Key File Format, RFC 4716, 2006. | 
|  |  | 
|  | Elliptic Curve Algorithm Integration in the Secure Shell Transport Layer, | 
|  | RFC 5656, 2009. | 
|  |  | 
|  | A. Perrig and D. Song, Hash Visualization: a New Technique to improve | 
|  | Real-World Security, 1999, International Workshop on Cryptographic | 
|  | Techniques and E-Commerce (CrypTEC '99). | 
|  |  | 
|  | AUTHORS | 
|  | OpenSSH is a derivative of the original and free ssh 1.2.12 release by | 
|  | Tatu Ylonen.  Aaron Campbell, Bob Beck, Markus Friedl, Niels Provos, Theo | 
|  | de Raadt and Dug Song removed many bugs, re-added newer features and | 
|  | created OpenSSH.  Markus Friedl contributed the support for SSH protocol | 
|  | versions 1.5 and 2.0. | 
|  |  | 
|  | OpenBSD 5.0                   September 11, 2011                   OpenBSD 5.0 |