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


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

Конкретно для FreeBSD:

  1. OpenSSH upgrade необходимо делать через порт /usr/ports/security/openssh-portable
    если у вас старый порт, то в Makefile необходимо сделать следующие изменения:
    ...
    PREFIX= /usr
    ...
    CONFIGURE_ARGS?=        --prefix=${PREFIX} --with-md5-passwords \
                            --sysconfdir=/etc/ssh --without-rsh \
                            --disable-suid-ssh --datadir=/usr/share/ssh \
    			--localstatedir=/var
    
  2. либо скачать новый порт openssh-portable:
    cd /usr/ports/security/
    mv openssh-portable openssh-portable.old
    wget -Y off -t 0 -r -c --cut-dirs=6 -nH ftp://ftp.FreeBSD.org/pub/FreeBSD/branches/-current/ports/security/openssh-portable/
    cd openssh-portable
    make OPENSSH_OVERWRITE_BASE=yes
    make install
    

Программное обеспечение необходимое для сборки OpenSSH:

Примечание: в portable версии 3.4p1 исправлены серьезные ошибки, affected версии с 2.3.1 по 3.3, в старых версиях:

sshd_config:
PAMAuthenticationViaKbdInt no              (с 2.3.1 по 3.3)
ChallengeResponseAuthentication no   (с 2.9.9 по 3.3)
UsePrivilegeSeparation yes                      (с 3.2 по 3.3)

Устанавливаем 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:

    Последнее: Версии OpenSSL 9.6d и OpenSSH 3.4p1 устанавливаются без каких-либо усилий и патчей, для Non-Intel платформ, запретить использование ассмеблера no-asm

  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:

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


Copyleft Andrey Lavrentyev