Skip site navigation (1)Skip section navigation (2)

FreeBSD Manual Pages




home | help
SSH(1)			 General Commands Manual			SSH(1)
NAME
 ssh -- OpenSSH remote login client
SYNOPSIS
 ssh [-46AaCfGgKkMNnqsTtVvXxYy]	[-B bind_interface] [-b bind_address]
	 [-c	 cipher_spec]	[-D [bind_address:]port] [-E log_file]
	 [-e	escape_char] [-F configfile]	[-I pkcs11] [-i	identity_file]
	 [-J	destination] [-L address] [-l login_name] [-m mac_spec]
	 [-O	 ctl_cmd] [-o	 option] [-P tag] [-p port]	 [-R address]
	 [-S	 ctl_path] [-W host:port]	[-w local_tun[:remote_tun]]
	 destination [command	[argument ...]]
 ssh [-Q query_option]
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 provide se-
 cure encrypted communications between two untrusted hosts over an inse-
 cure network. X11 connections, arbitrary TCP ports and Unix-domain
 sockets can also	be forwarded over the secure channel.
 ssh connects and logs	 into the specified destination, which	may be
 specified as either [user@]hostname	or a	 URI of the	 form
 ssh://[user@]hostname[:port]. The user must prove their identity to
 the remote machine using	one of several methods (see below).
 If a command is specified, it will be executed on the remote host in-
 stead of a login shell. A complete command line may be specified as
 command,	or it may have additional arguments. If supplied, the	 argu-
 ments will be appended	to the command,	separated by spaces, before it
 is sent to the server to	be executed.
 The options are as follows:
 -4 Forces ssh to use IPv4 addresses	only.
 -6 Forces ssh to use IPv6 addresses	only.
 -A Enables forwarding of connections from an authentication	 agent
	 such as ssh-agent(1). 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	opera-
	 tions on	the keys that enable them to authenticate using the
	 identities loaded into	the agent. A safer alternative	may be
	 to use a	jump host (see -J).
 -a Disables	forwarding of the authentication agent connection.
 -B bind_interface
	 Bind to the address of bind_interface before attempting to con-
	 nect to the destination host. This is only useful on systems
	 with more than one address.
 -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 ad-
	 dress.
 -C Requests	 compression of all data (including	stdin, stdout,
	 stderr, and data	for forwarded X11, TCP and Unix-domain connec-
	 tions).	The compression	algorithm is the same used by gzip(1).
	 Compression is desirable	on modem lines and other slow connec-
	 tions, but will only slow down things	on fast	networks. The
	 default value can be set	on a host-by-host basis	in the config-
	 uration files; see the Compression option in ssh_config(5).
 -c cipher_spec
	 Selects the cipher specification	for encrypting	 the session.
	 cipher_spec is a comma-separated list of ciphers listed	in or-
	 der 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 lo-
	 cal 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 sup-
	 ported, and ssh will act	as a SOCKS server. Only root can for-
	 ward 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 `*' in-
	 dicates that the	port should be available from all interfaces.
 -E log_file
	 Append debug logs to log_file instead of	standard error.
 -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. Set-
	 ting 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. If set to "none", no configuration files will
	 be read.
 -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 im-
	 plies -n. The recommended way to start X11 programs at	a re-
	 mote 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 it-
	 self in the	 background. Refer to the description of
	 ForkAfterAuthentication in ssh_config(5)	for details.
 -G Causes ssh to print its configuration after evaluating Host and
	 Match blocks and	exit.
 -g Allows remote hosts to connect to local	forwarded ports. If
	 used on	 a multiplexed	 connection, then this	option must be
	 specified on the	master process.
 -I pkcs11
	 Specify the PKCS#11 shared library ssh should use to communi-
	 cate with a PKCS#11 token providing keys for user authentica-
	 tion.
 -i identity_file
	 Selects a file from which the identity (private key) for	public
	 key authentication is read. You	can also specify a public key
	 file to	 use the corresponding private key that is loaded in
	 ssh-agent(1) when the private key file is not present locally.
	 The	default	 is	 ~/.ssh/id_rsa, ~/.ssh/id_ecdsa,
	 ~/.ssh/id_ecdsa_sk, ~/.ssh/id_ed25519 and ~/.ssh/id_ed25519_sk.
	 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). If
	 no certificates	 have been explicitly	 specified by the
	 CertificateFile	directive, ssh	will also try to load certifi-
	 cate information from	the filename obtained	 by appending
	 -cert.pub to identity filenames.
 -J destination
	 Connect to the target host by first making an ssh connection to
	 the jump host described	by destination and then	establishing a
	 TCP forwarding to the ultimate destination from there.	Multi-
	 ple jump hops may be specified	separated by comma characters.
	 IPv6 addresses can be specified by enclosing the address in
	 square brackets. This	 is a shortcut	to specify a ProxyJump
	 configuration directive.	 Note that configuration directives
	 supplied	on the command-line generally apply to the destination
	 host and not any specified jump hosts. Use ~/.ssh/config to
	 specify configuration for jump hosts.
 -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
 -L [bind_address:]port:remote_socket
 -L local_socket:host:hostport
 -L local_socket:remote_socket
	 Specifies that connections to the given TCP port	or Unix	socket
	 on the	local (client)	 host are to be	forwarded to the given
	 host and	port, or Unix socket, on the remote side. This	 works
	 by allocating a socket to listen to either a TCP port	on the
	 local side, optionally bound to the specified bind_address, or
	 to a Unix socket. Whenever a connection is made to the local
	 port or socket, the connection is forwarded over the	secure
	 channel,	and a connection is made to either host	port hostport,
	 or the Unix socket remote_socket, from the remote machine.
	 Port forwardings can also be	specified in the configuration
	 file. Only the superuser can forward privileged	 ports.	 IPv6
	 addresses can be specified by enclosing the address in	square
	 brackets.
	 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 `*' in-
	 dicates 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	 shar-
	 ing. Multiple	-M options places ssh	into "master" mode but
	 with confirmation required using	ssh-askpass(1) before each op-
	 eration that changes the	multiplexing state (e.g. opening a new
	 session). Refer to the description	of ControlMaster in
	 ssh_config(5) for details.
 -m mac_spec
	 A comma-separated list of MAC (message authentication code) al-
	 gorithms, specified in order of	preference. See the MACs key-
	 word in ssh_config(5) for more information.
 -N Do not execute a	remote command.	 This is useful	for just for-
	 warding	ports.	 Refer	to the	 description of	SessionType in
	 ssh_config(5) for details.
 -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.)	Refer to the	description of	 StdinNull in
	 ssh_config(5) for details.
 -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 for-
	 wardings), "proxy" (connect to a	running	multiplexing master in
	 proxy mode), "exit" (request the master to exit), and	"stop"
	 (request	the master to stop accepting further multiplexing re-
	 quests).
 -o option
	 Can be used to give options in the format used in the configu-
	 ration 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).
		 AddKeysToAgent
		 AddressFamily
		 BatchMode
		 BindAddress
		 CanonicalDomains
		 CanonicalizeFallbackLocal
		 CanonicalizeHostname
		 CanonicalizeMaxDots
		 CanonicalizePermittedCNAMEs
		 CASignatureAlgorithms
		 CertificateFile
		 CheckHostIP
		 Ciphers
		 ClearAllForwardings
		 Compression
		 ConnectionAttempts
		 ConnectTimeout
		 ControlMaster
		 ControlPath
		 ControlPersist
		 DynamicForward
		 EnableEscapeCommandline
		 EscapeChar
		 ExitOnForwardFailure
		 FingerprintHash
		 ForkAfterAuthentication
		 ForwardAgent
		 ForwardX11
		 ForwardX11Timeout
		 ForwardX11Trusted
		 GatewayPorts
		 GlobalKnownHostsFile
		 GSSAPIAuthentication
		 GSSAPIDelegateCredentials
		 HashKnownHosts
		 Host
		 HostbasedAcceptedAlgorithms
		 HostbasedAuthentication
		 HostKeyAlgorithms
		 HostKeyAlias
		 Hostname
		 IdentitiesOnly
		 IdentityAgent
		 IdentityFile
		 IPQoS
		 KbdInteractiveAuthentication
		 KbdInteractiveDevices
		 KexAlgorithms
		 KnownHostsCommand
		 LocalCommand
		 LocalForward
		 LogLevel
		 MACs
		 Match
		 NoHostAuthenticationForLocalhost
		 NumberOfPasswordPrompts
		 PasswordAuthentication
		 PermitLocalCommand
		 PermitRemoteOpen
		 PKCS11Provider
		 Port
		 PreferredAuthentications
		 ProxyCommand
		 ProxyJump
		 ProxyUseFdpass
		 PubkeyAcceptedAlgorithms
		 PubkeyAuthentication
		 RekeyLimit
		 RemoteCommand
		 RemoteForward
		 RequestTTY
		 RequiredRSASize
		 SendEnv
		 ServerAliveInterval
		 ServerAliveCountMax
		 SessionType
		 SetEnv
		 StdinNull
		 StreamLocalBindMask
		 StreamLocalBindUnlink
		 StrictHostKeyChecking
		 TCPKeepAlive
		 Tunnel
		 TunnelDevice
		 UpdateHostKeys
		 User
		 UserKnownHostsFile
		 VerifyHostKeyDNS
		 VisualHostKey
		 XAuthLocation
 -P tag Specify	a tag name that	may be used to select configuration in
	 ssh_config(5).	Refer to the	Tag and Match	 keywords in
	 ssh_config(5) for more information.
 -p port
	 Port to	 connect to on the remote host.	 This can be specified
	 on a per-host basis in the configuration	file.
 -Q query_option
	 Queries for the algorithms supported by one of	the following
	 features: cipher (supported symmetric	 ciphers), cipher-auth
	 (supported symmetric ciphers that support authenticated encryp-
	 tion), help (supported query terms for use with the -Q	flag),
	 mac (supported message integrity codes), kex (key exchange al-
	 gorithms), key (key types), key-ca-sign (valid CA signature al-
	 gorithms	for certificates), key-cert (certificate key types),
	 key-plain (non-certificate key	types),	key-sig	(all key types
	 and signature algorithms), protocol-version (supported SSH pro-
	 tocol versions),	and sig	(supported signature algorithms). Al-
	 ternatively, any	keyword	from ssh_config(5) or	sshd_config(5)
	 that takes an	algorithm list may be used as an alias for the
	 corresponding query_option.
 -q Quiet mode. Causes most	warning	and diagnostic messages	to be
	 suppressed.
 -R [bind_address:]port:host:hostport
 -R [bind_address:]port:local_socket
 -R remote_socket:host:hostport
 -R remote_socket:local_socket
 -R [bind_address:]port
	 Specifies that connections to the given TCP port	or Unix	socket
	 on the	remote	(server) host are to be	forwarded to the local
	 side.
	 This works by allocating	a socket to listen to	either	a TCP
	 port or	 to a Unix socket on the remote	side. Whenever	a con-
	 nection is made to this port or Unix socket, the	connection is
	 forwarded over	the secure channel, and a connection is made
	 from the	local machine to either	an explicit destination	speci-
	 fied by host port hostport, or local_socket, or,	if no explicit
	 destination was specified, ssh will act as a SOCKS 4/5	 proxy
	 and forward connections to the destinations requested	by the
	 remote SOCKS client.
	 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 brackets.
	 By default, TCP listening sockets 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 ad-
	 dress `*', 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 dynami-
	 cally 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 shar-
	 ing, 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 facilitate the use	of SSH	 as a	secure
	 transport for other applications	(e.g. sftp(1)).	 The subsystem
	 is specified as the remote command. Refer to the description
	 of SessionType in ssh_config(5) for details.
 -T Disable pseudo-terminal allocation.
 -t Force pseudo-terminal 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, authentica-
	 tion, 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 for-
	 warded to host	 on port over the secure channel. Implies -N,
	 -T, ExitOnForwardFailure	and ClearAllForwardings, though	 these
	 can be overridden in the	configuration file or using -o command
	 line options.
 -w local_tun[:remote_tun]
	 Requests	tunnel device forwarding with the specified tun(4) de-
	 vices 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 will be set	to the default
	 tunnel mode, which is "point-to-point".	 If a different	Tunnel
	 forwarding mode it desired, then	it should be specified	before
	 -w.
 -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 dis-
	 play 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. 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 de-
	 fault this information is sent to stderr.
 ssh may additionally obtain configuration data from a per-user configu-
 ration 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 protocol 2.
 The methods available for authentication	are: GSSAPI-based authentica-
 tion, host-based authentication, public key authentication, keyboard-
 interactive authentication, and password	 authentication. Authentica-
 tion methods	are tried in	 the order specified	above,	though
 PreferredAuthentications	can be used to change the default order.
 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, the user	is non-root 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 administra-
 tor: /etc/hosts.equiv, ~/.rhosts, and the rlogin/rsh protocol in gen-
 eral, are inherently insecure and should	be disabled if security	is de-
 sired.]
 Public key authentication works as follows: The scheme is based on pub-
 lic-key	cryptography, using cryptosystems where	encryption and decryp-
 tion 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 ECDSA, Ed25519 or RSA	algorithms.
 The file ~/.ssh/authorized_keys	lists the public keys that are permit-
 ted 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 server may inform the client	of errors that	prevented public key
 authentication from succeeding	after authentication completes using a
 different method. These	may be viewed by increasing the LogLevel to
 DEBUG or	higher (e.g. by	using the -v flag).
 The user creates their key pair	by running ssh-keygen(1). This	stores
 the private key in ~/.ssh/id_ecdsa (ECDSA), ~/.ssh/id_ecdsa_sk (authen-
 ticator-hosted	 ECDSA),	 ~/.ssh/id_ed25519	 (Ed25519),
 ~/.ssh/id_ed25519_sk (authenticator-hosted Ed25519), or ~/.ssh/id_rsa
 (RSA) and stores the	public	key in	 ~/.ssh/id_ecdsa.pub (ECDSA),
 ~/.ssh/id_ecdsa_sk.pub		(authenticator-hosted	 ECDSA),
 ~/.ssh/id_ed25519.pub (Ed25519),	~/.ssh/id_ed25519_sk.pub (authentica-
 tor-hosted Ed25519), or	~/.ssh/id_rsa.pub (RSA)	in the user's home di-
 rectory.	 The	 user	should	 then	copy the public key to
 ~/.ssh/authorized_keys in their 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. Af-
 ter 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 pub-
 lic/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) and (optionally)
 the AddKeysToAgent directive in ssh_config(5) for more information.
 Keyboard-interactive authentication works as follows: The server	 sends
 an arbitrary "challenge"	text and prompts for a response, possibly mul-
 tiple times. Examples	of keyboard-interactive	authentication include
 BSD Authentication (see login.conf(5)) and PAM (some non-OpenBSD sys-
 tems).
 Finally,	if other authentication	methods	fail, ssh prompts the user for
 a password. The	password is sent to the	remote host for	checking; how-
 ever, since all communications are encrypted,	the password cannot be
 seen by someone listening on the	network.
 ssh automatically maintains and checks a	database containing identifi-
 cation 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 in a	non-interactive	session	or, if
 no command has been specified, logs into	the machine and	gives the user
 a normal	shell as an interactive	session. All communication with the
 remote command or shell will be automatically encrypted.
 If an interactive session is requested, ssh by default will only re-
 quest a pseudo-terminal (pty) for interactive sessions when the	client
 has one.	 The flags -T and -t can be used to override this behaviour.
 If a pseudo-terminal has been	allocated, the user may	use the	escape
 characters noted	below.
 If no pseudo-terminal 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 if the peer sup-
	 ports 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 if the peer
	 supports	it).
 ~V Decrease	the verbosity (LogLevel) when errors are being written
	 to stderr.
 ~v Increase	the verbosity (LogLevel) when errors are being written
	 to stderr.
TCP FORWARDING
 Forwarding of arbitrary TCP connections over a 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 for an IRC
 client,	even though the IRC server it connects to does not directly
 support encrypted communication.	 This works as follows:	the user con-
 nects to the remote host using ssh, specifying the ports to be used to
 forward the connection.	After that it is possible to start the program
 locally,	and ssh	will encrypt and forward the connection	to the	remote
 server.
 The following example tunnels an IRC session from the client to	an IRC
 server at "server.example.com",	 joining channel "#users", nickname
 "pinky",	using the standard IRC port, 6667:
	 $ ssh -f -L 6667:localhost:6667 server.example.com sleep 10
	 $ irc -c '#users' pinky IRC/127.0.0.1
 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 program which	is going to use	the tunnel. 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 be-
 cause ssh creates a "proxy" X server on the server machine for forward-
 ing the connections over	the encrypted channel.
 ssh will also	automatically set up Xauthority	data on	the server ma-
 chine. For this	purpose, it will generate a	 random	 authorization
 cookie,	store it in Xauthority on the server, and verify that any for-
 warded 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	deter-
 mined 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. If	only legacy (MD5) fingerprints for the
 server are available, the ssh-keygen(1) -E option may be	used to	 down-
 grade the fingerprint algorithm to match.
 Because	of the	 difficulty of	comparing host keys just by looking at
 fingerprint strings, there is also support to compare host keys	 visu-
 ally, 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 con-
 trols 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 gate-
 way 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 per-
 manent 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 nor-
			 mally not set DISPLAY explicitly,	as that will
			 render the X11 connection	insecure (and will re-
			 quire the user to manually	copy any required au-
			 thorization cookies).
 HOME		 Set to the	path of	the user's home	directory.
 LOGNAME		 Synonym for USER; set for compatibility with sys-
			 tems that use this	variable.
 MAIL		 Set to the	path of	the user's mailbox.
 PATH		 Set to the default PATH,	as specified when com-
			 piling 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 ter-
			 minal 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 re-
			 lated script. (Note that on some machines	it may
			 be	necessary to redirect the input	from /dev/null
			 to	make this work.)
 SSH_ASKPASS_REQUIRE Allows further control over the use of an askpass
			 program. If this variable	is set to "never" then
			 ssh will never attempt to	use one. If it	is set
			 to	"prefer", then ssh will prefer to use the
			 askpass program instead of the TTY when request-
			 ing passwords. Finally, if the variable is set
			 to	"force", then the askpass program will be used
			 for all passphrase input regardless of whether
			 DISPLAY is	set.
 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 con-
			 nection.	The variable contains four space-sepa-
			 rated values: client IP address, client port num-
			 ber, 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 com-
			 mand. If	 the current session has no tty, this
			 variable is not set.
 SSH_TUNNEL	 Optionally	set by sshd(8) to contain the	inter-
			 face names assigned if tunnel forwarding was re-
			 quested by	the client.
 SSH_USER_AUTH	 Optionally	set by sshd(8),	this variable may con-
			 tain a pathname to	a file that lists the authen-
			 tication methods successfully used when the ses-
			 sion was established, including any public keys
			 that were used.
 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 con-
			 nections).
 USER		 Set to the	name of	the user logging in.
 Additionally, ssh reads	~/.ssh/environment, and	adds lines of the for-
 mat "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 al-
	 lows 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 gen-
	 eral 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	(ECDSA,	Ed25519, RSA) that can be used
	 for logging in as this user. The format	of this	 file is de-
	 scribed	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 permis-
	 sions: read/write for the user, and not writable	by others.
 ~/.ssh/environment
	 Contains	additional definitions for environment variables; see
	 "ENVIRONMENT", above.
 ~/.ssh/id_ecdsa
 ~/.ssh/id_ecdsa_sk
 ~/.ssh/id_ed25519
 ~/.ssh/id_ed25519_sk
 ~/.ssh/id_rsa
	 Contains	 the private key for authentication. These files con-
	 tain sensitive data and should be readable by the user but not
	 accessible by others (read/write/execute). ssh will simply ig-
	 nore 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
	 AES-128.
 ~/.ssh/id_ecdsa.pub
 ~/.ssh/id_ecdsa_sk.pub
 ~/.ssh/id_ed25519.pub
 ~/.ssh/id_ed25519_sk.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 configura-
	 tion options are	described in ssh_config(5).
 /etc/ssh/ssh_host_ecdsa_key
 /etc/ssh/ssh_host_ed25519_key
 /etc/ssh/ssh_host_rsa_key
	 These files contain the private parts of	the host keys and are
	 used for	host-based authentication.
 /etc/ssh/ssh_known_hosts
	 Systemwide list	 of known host keys. This file	should be pre-
	 pared 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), ssh_config(5), ssh-keysign(8), sshd(8)
STANDARDS
 S. Lehtinen and C. Lonvick, The Secure Shell (SSH) Protocol Assigned
 Numbers,	RFC 4250, January 2006.
 T. Ylonen and C.	Lonvick, The Secure Shell (SSH)	Protocol Architecture,
 RFC 4251, January 2006.
 T. Ylonen and C. Lonvick, The Secure Shell	 (SSH)	Authentication
 Protocol, RFC 4252, January 2006.
 T. Ylonen and	C. Lonvick, The Secure Shell (SSH) Transport Layer
 Protocol, RFC 4253, January 2006.
 T. Ylonen and C.	Lonvick, The Secure Shell (SSH)	 Connection Protocol,
 RFC 4254, January 2006.
 J. Schlyter and	W. Griffin, Using DNS to Securely Publish Secure Shell
 (SSH) Key Fingerprints, RFC 4255, January 2006.
 F. Cusack and M.	Forssen, Generic Message Exchange Authentication for
 the Secure Shell	Protocol (SSH),	RFC 4256, January 2006.
 J. Galbraith and P. Remaker,	The Secure Shell (SSH) Session Channel
 Break Extension,	RFC 4335, January 2006.
 M. Bellare, T. Kohno, and C.	Namprempre, The Secure Shell	 (SSH)
 Transport Layer Encryption Modes, RFC 4344, January 2006.
 B. Harris, Improved Arcfour Modes for the Secure Shell (SSH) Transport
 Layer Protocol, RFC 4345, January 2006.
 M. Friedl, N. Provos, and W. Simpson, Diffie-Hellman Group Exchange for
 the Secure Shell	(SSH) Transport	Layer Protocol,	RFC 4419, March	2006.
 J. Galbraith and	R. Thayer, The Secure Shell (SSH) Public Key File
 Format, RFC 4716, November 2006.
 D. Stebila and	 J. Green, Elliptic Curve Algorithm Integration	in the
 Secure Shell Transport Layer, RFC 5656, December	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.
FreeBSD	14.3			 July 18, 2024				SSH(1)

Want to link to this manual page? Use this URL:
<https://man.freebsd.org/cgi/man.cgi?query=ssh&manpath=FreeBSD+14.3-RELEASE+and+Ports>

home | help

AltStyle によって変換されたページ (->オリジナル) /