OpenSSH FAQ (Frequently asked questions)

Date: 2002/04/03

1.0 - What Is OpenSSH and Where Can I Get It?

2.0 - General Questions

3.0 - Portable OpenSSH Questions

1.0 - What Is OpenSSH and Where Can I Get It?

1.1 - What is OpenSSH?

OpenSSH is a FREE version of the SSH suite of network connectivity tools that increasing numbers of people on the Internet are coming to rely on. Many users of telnet, rlogin, ftp, and other such programs might not realize that their password is transmitted across the Internet unencrypted, but it is. OpenSSH encrypts all traffic (including passwords) to effectively eliminate eavesdropping, connection hijacking, and other network-level attacks.

The OpenSSH suite includes the ssh(1) program which replaces rlogin and telnet, and scp(1) which replaces rcp(1) and ftp(1). OpenSSH has also, recently, added sftp(1) and sftp-server(8) which implement an easier solution for file-transfer. This is based upon the secsh-filexfer IETF draft.

OpenSSH consists of a number of programs.

1.2 - Why should it be used?

OpenSSH is a suite of tools to help secure your network connections. Here is a list of features:

Currently, almost all communications in computer networks are done without encryption. As a consequence, anyone who has access to any machine connected to the network can listen in on any communication. This is being done by hackers, curious administrators, employers, criminals, industrial spies, and governments. Some networks leak off enough electromagnetic radiation that data may be captured even from a distance.

When you log in, your password goes in the network in plain text. Thus, any listener can then use your account to do any evil he likes. Many incidents have been encountered worldwide where crackers have started programs on workstations without the owner's knowledge just to listen to the network and collect passwords. Programs for doing this are available on the Internet, or can be built by a competent programmer in a few hours.

Businesses have trade secrets, patent applications in preparation, pricing information, subcontractor information, client data, personnel data, financial information, etc. Currently, anyone with access to the network (any machine on the network) can listen to anything that goes in the network, without any regard to normal access restrictions.

Many companies are not aware that information can so easily be recovered from the network. They trust that their data is safe since nobody is supposed to know that there is sensitive information in the network, or because so much other data is transferred in the network. This is not a safe policy.

1.3 - What operating systems are supported?

Even though OpenSSH is developed on OpenBSD a wide variety of ports to other operating systems exist. The portable version of OpenSSH is headed by Damien Miller. For a quick overview of the portable version of OpenSSH see: http://www.openssh.com/portable.html. A quick view of other OS's that are supported is below.

A list of vendors that include OpenSSH in their distributions is located at www.openssh.com/users.html. :

1.4 - What about copyrights, usage and patents?

The OpenSSH developers have tried very hard to keep OpenSSH free of any patent or copyright problems. To do this, some options had to be stripped from OpenSSH. Namely support for patented algorithms.

OpenSSH does not support any patented transport algorithms. In SSH1 mode, only 3DES and Blowfish are available options. In SSH2 mode, only 3DES, Blowfish, CAST128, Arcfour and AES can be selected. The patented IDEA algorithm is not supported.

OpenSSH provides support for both SSH1 and SSH2 protocols.

Since the RSA patent has expired, there are no restrictions on the use of RSA algorithm using software, including OpenBSD.

1.5 - Where should I ask for help?

There are many places to turn to for help. In addition to the main OpenSSH website: http://www.openssh.com, there are many mailing lists to try. But before trying any mailing lists, please search through all mailing list archives to see if your question has already been answered. The OpenSSH Mailing List has been archived and put in searchable form and can be found at theaimsgroup.com.

For more information on subscribing to OpenSSH related mailing lists, please see: www.openssh.com/list.html.

2.0 - General Questions

2.1 - Why does ssh/scp make connections from low-numbered ports.

The OpenSSH client uses low numbered ports for rhosts and rhosts-rsa authentication because the server needs to trust the username provided by the client. To get around this, you can add the below example to your ssh_config or ~/.ssh/config file.

UsePrivilegedPort no

Or you can specify this option on the command line, using the -o option to ssh(1) command.

$ ssh -o "UsePrivilegedPort no" host.com

2.2 - Why is the ssh client setuid root?

In conjunction with the previous question, (2.1) OpenSSH needs root authority to be able to bind to low-numbered ports to facilitate rhosts authentication. A privileged port is also required for rhosts-rsa authentication to older SSH releases.

Additionally, for both rhosts-rsa authentication (in protocol version 1) and hostbased authentication (in protocol version 2) the ssh client needs to access the private host key in order to authenticate the client machine to the server. So the setuid root bit is needed for these authentication methods, too. You can safely remove the setuid bit from the ssh executable if you don't want to use these authentication methods.

2.3 - Why does SSH 2.3 have problems interoperating with OpenSSH 2.1.1?

SSH 2.3 and earlier versions contain a flaw in their HMAC implementation. Their code was not supplying the full data block output from the digest, and instead always provided 128 bits. For longer digests, this caused SSH 2.3 to not interoperate with OpenSSH.

OpenSSH 2.2.0 detects that SSH 2.3 has this flaw. Recent versions of SSH will have this bug fixed. Or you can add the following to SSH 2.3 sshd2_config.

Mac hmac-md5

2.4 - Why does OpenSSH print: Dispatch protocol error: type 20

Problems in interoperation have been seen because older versions of OpenSSH did not support session rekeying. However the commercial SSH 2.3 tries to negotiate this feature, and you might experience connection freezes or see the error message "Dispatch protocol error: type 20 ". To solve this problem, either upgrade to a recent OpenSSH release or disable rekeying by adding the following to your commercial SSH 2.3's ssh2_config or sshd2_config.

RekeyIntervalSeconds 0

2.5 - Old versions of commercial SSH encrypt host keys with IDEA.

The old versions of SSH used a patented algorithm to encrypt their /etc/ssh/ssh_host_key. This problem will manifest as sshd(8) not being able to read its host key. To solve this, use the command below to convert your ssh_host_key to use 3DES. NOTE: Use the ssh-keygen(1) program from the Commercial SSH product, *NOT* OpenSSH for the example below.

# ssh-keygen -u -f /etc/ssh/ssh_host_key

2.6 - What are these warning messages about key lengths

Commercial SSH's ssh-keygen(1) program contained a bug which caused it to occasionally generate Pubkey Authentication (RSA or DSA) keys which had their Most Significant Bit (MSB) unset. Such keys were advertised as being full-length, but are actually, half the time, smaller than advertised.

OpenSSH will print warning messages when it encounters such keys. To rid yourself of these message, edit you known_hosts files and replace the incorrect key length (usually "1024") with the correct key length (usually "1023").

2.7 - X11 and/or agent forwarding does not work.

Check your ssh_config and sshd_config. The default configuration files disable authentication agent and X11 forwarding. To enable it, put the line below in sshd_config:

X11Forwarding yes

and put the following lines in ssh_config:

ForwardAgent yes
ForwardX11 yes

NOTE: For users of Linux Mandrake 7.2, Mandrake modifies the XAUTHORITY environment variable in /etc/skel/.bashrc, and thus any bash user's home directory. This variable is set by OpenSSH and for either of the above options to work, you need to comment out the line:

# export XAUTHORITY=$HOME/.Xauthority

2.8 - After upgrading OpenSSH I lost SSH2 support.

Between versions changes can be made to sshd_config or ssh_config. You should always check on these changes when upgrading versions of OpenSSH. After OpenSSH Version 2.3.0 you need to add the following to your sshd_config

HostKey /etc/ssh_host_dsa_key
HostKey /etc/ssh_host_rsa_key

2.9 - sftp/scp fails at connection, but ssh is OK.

sftp and/or scp may fail at connection time if you have shell initialization (.profile, .bashrc, .cshrc, etc) which produces output for non-interactive sessions. This output confuses the sftp/scp client. You can verify if your shell is doing this by executing:

ssh yourhost /usr/bin/true

If the above command produces any output, then you need to modify your shell initialization.

3.0 - Portable OpenSSH Questions

3.1 - Spurious PAM authentication messages in logfiles.

The portable version of OpenSSH will generate spurious authentication failures at every login, similar to:

"authentication failure; (uid=0) -> root for sshd service"

These are generated because OpenSSH first tries to determine whether a user needs authentication to login (e.g. empty password). Unfortunately PAM likes to log all authentication events, this one included.

If it annoys you too much, set "PermitEmptyPasswords no" in sshd_config. This will quiet the error message at the expense of disabling logins to accounts with no password set. This is the default if you use the supplied sshd_config file.

3.2 - Empty passwords not allowed with PAM authentication.

To enable empty passwords with a version of OpenSSH built with PAM you must add the flag nullok to the end of the password checking module in the /etc/pam.d/sshd file. For example:

auth required/lib/security/pam_unix.so shadow nodelay nullok

This must be done in addition to setting "PermitEmptyPasswords yes" in the sshd_config file.

There is one caveat when using empty passwords with PAM authentication: PAM will allow any password when authenticating an account with an empty password. This breaks the check that sshd(8) uses to determine whether an account has no password set and grant users access to the account regardless of the policy specified by PermitEmptyPasswords. For this reason, it is recommended that you do not add the nullok directive to your PAM configuration file unless you specifically wish to allow empty passwords.

3.3 - ssh(1) takes a long time to connect with Linux/glibc 2.1

The glibc shipped with Redhat 6.1 appears to take a long time to resolve "IPv6 or IPv4" addresses from domain names. This can be kludged around with the --with-ipv4-default configure option. This instructs OpenSSH to use IPv4-only address resolution. (IPv6 lookups may still be made by specifying the -6 option).

3.4 - "Can't locate module net-pf-10" messages in log under Linux.

The Linux kernel is looking (via modprobe) for protocol family 10 (IPv6). Either load the appropriate kernel module, enter the correct alias in /etc/modules.conf or disable IPv6 in /etc/modules.conf.

For some silly reason /etc/modules.conf may also be named /etc/conf.modules.

3.5 - Password authentication doesn't work on Slackware 7.0

For Slackware 7.0, you need to link OpenSSH with libcrypt.

LIBS=-lcrypt ./configure [options]

3.6 - Configure or sshd(8) complain about lack of RSA or DSA support

Ensure that your OpenSSL libraries have been built to include RSA or DSA support either internally or through RSAref.

3.7 - "scp: command not found" errors

scp(1) must be in the default PATH on both the client and the server. You may need to use the --with-default-path option to specify a custom path to search on the server. This option replaces the default path, so you need to specify all the current directories on your path as well as where you have installed scp. For example:

$ ./configure --with-default-path=/bin:/usr/bin:/usr/local/bin:/path/to/scp

3.8 - Unable to read passphrase

Some operating systems set /dev/tty with incorrect modes, causing the reading of passwords to fail with the following error:

You have no controlling tty. Cannot read passphrase.

The solution to this is to reset the permissions on /dev/tty to mode 0666 and report the error as a bug to your OS vendor.

3.9 - 'configure' missing or make fails

If there is no 'configure' file in the tar.gz file that you downloaded or make fails with "missing separator" errors, you have probably downloaded the OpenBSD distribution of OpenSSH and are attempting to compile it on another platform. Please refer to the information on the portable version.

3.10 - Hangs when exiting ssh

OpenSSH may hang when exiting. This can occur when there is an active background process. This is known to occur on Linux and HP-UX. The problem can be verified by doing the following:

$ sleep 20 & exit
Try to use this instead:
$ sleep 20 < /dev/null > /dev/null 2>&1 &

A work around for bash users is to place "shopt -s huponexit" in either /etc/bashrc or ~/.bashrc. Otherwise, consult your shell's man page for an option to enable it to send a HUP signal to active jobs when exiting.

3.11 - Why does ssh hang on exit?

When executing

$ ssh host command
ssh needs to hang, because it needs to wait:

3.12 - I upgraded to OpenSSH 3.1 and X11 forwarding stopped working.

Starting with OpenSSH 3.1, the sshd x11 forwarding server listens on localhost by default; see the sshd X11UseLocalhost option to revert to prior behaviour if your older X11 clients do not function with this configuration.

In general, X11 clients using X11 R6 should work with the default setting. Some vendors, including HP, ship X11 clients with R6 and R5 libs, so some clients will work, and others will not work. This is true for HP-UX 11.X.

OpenSSH www@openbsd.org
$OpenBSD: faq.html,v 1.53 2003/02/26 21:23:48 david Exp $