Собираем OpenSSH и OpenSSL

Автор: Андрей Лаврентьев (lavr@unix1.jinr.ru), http://unix1.jinr.ru/~lavr/

Sources of distribution: openssh, openssl, rsaref, random packages for Solaris

Важное: Для невнимательных, в OS отличные от OpenBSD, необходимо скачивать и устанавливать portable версии OpenSSH, П-О-Р-Т-И-Р-О-В-А-Н-Н-Ы-Й OpenSSH.

Устанавливаем OpenSSH:

  1. Проверяем установлены ли dependence, зависимые библиотеки: OpenSSL, ZLib.

    OpenSSH 2.9p2 или 3.01p требует уже установленных в системе библиотек:

    Если указанные библиотеки установлены, можно перейти к установке OpenSSH, иначе, необходимо собрать перечисленные библиотеки. Для проверки наличия библиотек, в системах FreeBSD/Linux/NetBSD/OpenBSD, воспольуйтесь командой ldconfig, man ldconfig.
    Например (Linux): ldconfig -p | grep ssl ldconfig -p | grep libz ... Например (FreeBSD): ldconfig -r | grep ssl ... Например (Solaris): echo $LD_LIBARARY_PATH echo $LD_RUN_PATH и в соответствии с указанным маршрутом библиотек, использовать команды: ls -la /path/lib | grep ssl ... или find /path -name "libssl*" -print Устанавливаем библиотеки ZLib и OpenSSL:

  2. Устанавливаем OpenSSH: Советы очень простые, желательно использовать оптимизацию и свои, возможно, не тривиальные ключи компиляторов gcc/egcs/pgcc/cc. Строго использовать ключи: --disable-suid-ssh --without-rsh --with-pam (если ваша OS поддерживает PAM и вы хотите задействовать поддержку) и помнить что опция --libexecdir=/path - задает путь к месторасположению ssh-askpass

    В ряде систем, отсутствуют драйвера и устройства рандомизации:

    Для их эмуляции можно воспользоваться проектами EGD или PRNGD.
    Для OS Solaris, воспользоваться драйвером random, дистрибутивы ANDIrand указаны выше или EGD, PRNGD.
    Для OS FreeBSD использовать /usr/ports/security/openssh-portable.
    Для OS Linux использовать rpm/srpm или собрать самостоятельно.

    Примечание: Если у вас возникли проблемы на этапе линковки в коммерческих non-intel платформах, ищите правильный порядок следования библиотек -lname и правьте Makefile.
    Дело в том что ни один грамотный администратор, не будет устанавливать на non-intel платформу gcc с его линкером, гнутые ld просто не работают!
    А родные линкеры очень умные и щепетильные в плане построения компилятора и линковщика.
    Позже я добавлю тонкости установки OpenSSH на платформы ConvexOS(что-то типа bsd-43, по-русски глюкало), SPP HP-UX(ядро mach с эмуляцией OS HP-UX - по-русски глюкало), HP-UX.

  3. Устанавливаем OpenSSH-AskPass: Никаких особых тонкостей нет, за исключением использования функции substr|sub в awk/gawk, в оригинальном варианте, в качестве имени функции используется sub - справедливо для гнусного awk(gawk), в коммерческих системах, в awk эта функция называется substr. Патч прилагается выше, как и все необходимые distribution sources.

Генерация новых или недостающих личных и публичных ключей (private/public) для SSH-1(rsa) и для SSH-2(rsa/dsa).

  1. Проверяем есть ли у нас на рабочей машине директория $HOME/.ssh и ее содержимое: [unix1]~ > ls -la .ssh ls: .ssh: No such file or directory [unix1]~ > В данном примере, у нас нет такой директории и соответственно нет личных и публичных ключей, на рабочей(клиентской машине) они должны быть, ниже будет пример генерации ключей. [unix1]~ > ls -la .ssh total 67 drwxr-xr-x 2 lavr dug 512 19 ноя 15:40 . drwxr-xr-x 71 lavr dug 7680 22 ноя 15:37 .. -rw-r--r-- 1 lavr dug 1475 20 ноя 15:13 config -rw------- 1 lavr dug 537 5 июл 2000 identity -rw-r--r-- 1 lavr dug 678 29 янв 2001 identity.pub -rw-r--r-- 1 lavr dug 31270 22 ноя 13:40 known_hosts В данном примере, у нас есть директория .ssh и все необходимые ключи для SSH1: identity - личный, identity.pub - публичный. Но отсутствуют ключи RSA/DSA для SSH2, их необходимо создать.

  2. Генерация личных и публичных ключей:

    1. Если у нас не созданы ключи для SSH-1, создаем их командой ssh-keygen: [unix1]~ > ssh-keygen Generating public/private rsa1 key pair. Enter file in which to save the key (/home/lavr/.ssh/identity): Created directory '/home/lavr/.ssh'. Enter passphrase (empty for no passphrase): Enter same passphrase again: Your identification has been saved in /home/lavr/.ssh/identity. Your public key has been saved in /home/lavr/.ssh/identity.pub. The key fingerprint is: 6e:28:9e:21:e7:08:60:05:d0:30:fe:9c:b4:c3:19:f7 lavr@unix1.jinr.ru [unix1]~ >
    2. Если у нас не созданы ключи для SSH-2, создаем их командой ssh-keygen с параметрами rsa и dsa:

      Генерация RSA ключей для SSH-2: [unix1]~ > ssh-keygen -t rsa Generating public/private rsa key pair. Enter file in which to save the key (/home/lavr/.ssh/id_rsa): Enter passphrase (empty for no passphrase): Enter same passphrase again: Your identification has been saved in /home/lavr/.ssh/id_rsa. Your public key has been saved in /home/lavr/.ssh/id_rsa.pub. The key fingerprint is: 04:b0:65:aa:dc:c0:e4:23:c2:1c:3a:cb:27:d4:5b:b3 lavr@unix1.jinr.ru [unix1]~ >

      Генерация DSA ключей для SSH-2: [unix1]~ > ssh-keygen -t dsa Generating public/private dsa key pair. Enter file in which to save the key (/home/lavr/.ssh/id_dsa): Enter passphrase (empty for no passphrase): Enter same passphrase again: Your identification has been saved in /home/lavr/.ssh/id_dsa. Your public key has been saved in /home/lavr/.ssh/id_dsa.pub. The key fingerprint is: f3:c7:9b:ad:32:08:c1:d0:8f:2b:ef:ec:f1:77:04:d9 lavr@unix1.jinr.ru

    Примечание: passphrase при генерации не отображается на экране, следует различать личные rsa ключи для протокола SSH-1 - identity, для SSH-2 - id_rsa и публичные соответственно.

Использование SSH-2 для работы с машинами под управлением SSH-1:

Все что необходимо, это добавить опцию -1 при использовании команд:

slogin,ssh, для scp указывать опцию -oProtocol=1

Примеры: [unix1]~ > slogin -1 cv Enter passphrase for RSA key '/home/lavr/.ssh/identity': No mail. No new messages. cv:/local2/home/lavr> На машине(рабочая станция - клиент) unix1 - ssh2, на машине cv - ssh1.

Примеры файлов конфигураций(SSH2):

На своей рабочей станции, я люблю запускать X11 через ssh-agent чтобы затем работать со всеми удаленными машинами с sshd, используя авторизацию через публичные ключи: rsa и/или dsa. Для этого необходимо изменить xinitrc или $HOME/.xinitrc и startx:

Теперь достаточно добавить свои публичные ключи, содержимое файлов: old_rsa(ssh1) - $HOME/.ssh/identity.pub в файл remotehost:$HOME/.ssh/authorized_keys rsa(ssh2) - $HOME/.ssh/id_rsa.pub в файл remotehost:$HOME/.ssh/authorized_keys2 dsa(ssh2) - $HOME/.ssh/id_dsa.pub в файл remotehost:$HOME/.ssh/authorized_keys2 chmod 755 $HOME/.ssh (или даже 700) chmod 600 $HOME/.ssh/authorized_keys chmod 600 $HOME/.ssh/authorized_keys2 Примечание: файлы identity.pub/id_rsa.pub/id_dsa.pub - публичные ключи на локальной машине, в то время как authorized_keys/authorized_keys2 файлы содержащие публичные ключи других машин, с которых разрешен вход через авторизацию по публичным ключам.
Все готово для того чтобы с рабочей машины заходить на удаленные, на которых запущен sshd(2'ой или 3'ей версии) без пароля, через авторизацию публичных ключей. Если вы привыкли запускать X11 через xdm, то указанную выше процедуру следует проделать с xsession.

SSH для Windows:

Clients:

SCP for Windows:

SFTP for Windows:

Client-Server для OS Windows:

Вариации SSH & SSHD for Windows на базе Cygwin:

Коммерческие продукты для OS Windows:

Some links and resources:

Ссылки на месторасположения где находятся оригиналы:

Ссылки на руководства SSH/OpenSSH

Русскоязычные:

Оригиналы in english:

Списки рассылок: