Руководство FreeBSD
Пред. | Глава 14. Безопасность | След.

# 14.12. OpenSSH

Предоставил Chern Lee.

OpenSSH это набор сетевых инструментов, используемых для защищенного доступа к удаленным компьютерам. Он может быть использован в качестве непосредственной замены `rlogin`, `rsh`, `rcp` и `telnet`. Кроме того, любые другие TCP/IP соединения могут быть безопасно тунеллированы/перенаправлены через SSH. OpenSSH шифрует весь трафик, эффективно предотвращая кражу данных, перехват соединения и другие сетевые атаки.

OpenSSH поддерживается проектом OpenBSD, он основан на SSH v1.2.12 со всеми последними исправлениями и обновлениями, совместим с протоколами SSH версий 1 и 2. OpenSSH включен в базовую систему начиная с FreeBSD 4.0.

## 14.12.1. Преимущества использования OpenSSH

Обычно при использовании telnet(1) или rlogin(1) данные пересылаются по сети в незашифрованной форме. Перехватчик пакетов в любой точке сети между клиентом и сервером может похитить информацию о пользователе/пароле или данные, передаваемые через соединение. Для предотвращения этого OpenSSH предлагает различные методы шифрования.

## 14.12.2. Включение sshd

Убедитесь, что добавили в файл `rc.conf` следующую строку:

    sshd_enable="YES"

При следующей загрузке системы запущен sshd(8), даемон для OpenSSH. Вы можете также запустить sshd непосредственно, набрав в командной строке `sshd`.

## 14.12.3. SSH клиент

Утилита ssh(1) работает подобно rlogin(1).

    # ssh user@example.com
    Host key not found from the list of known hosts.
    Are you sure you want to continue connecting (yes/no)? yes
    Host 'example.com' added to the list of known hosts.
    user@example.com's password: *******

Вход продолжится так же, как если бы сессия была инициирована с использованием `rlogin` или `telnet`. SSH использует систему опознавательных ключей для проверки подлинности сервера при подключении клиента. Пользователю предлагается yes только при первом подключении. Дальнейшие попытки входа предваряются проверкой сохраненного ключа сервера. SSH клиент сообщит вам, если сохраненный ключ будет отличаться от только что полученного. Ключи серверов сохраняются в `~/.ssh/known_hosts`, или в `~/.ssh/known_hosts2` для SSH v2.

По умолчанию, сервер OpenSSH настроен для приема соединений SSH v1 и SSH v2. Клиент может выбирать между этими двумя протоколами. Версия 2 безопаснее своего предшественника.

Команде ssh(1) можно указать использование определенной версии протокола, запустив ее с параметром -1 или -2 для версии 1 или 2 соответственно.

## 14.12.4. Безопасное копирование

Команда scp(1) работает подобно rcp(1); она копирует файл с удаленного компьютера, но делает это безопасным способом.

    # scp user@example.com:/COPYRIGHT COPYRIGHT
    user@example.com's password: *******
    COPYRIGHT            100% |*****************************|  4735
    00:00
    #

Поскольку в предыдущем примере ключ сервера уже был сохранен, в этом примере он проверяется при использовании scp(1).

Параметры, передаваемые scp(1), похожи на параметры cp(1), с файлом или файлами в качестве первого аргумента и приемником копирования во втором. Поскольку файлы файлы передаются по сети через SSH, один или более аргументов принимают форму user@host:<path_to_remote_file>.

## 14.12.5. Настройка

Системные файлы настройки для даемона и клиента OpenSSH расположены в каталоге `/etc/ssh`.

Файл `ssh_config` используется для настройки клиента, а `sshd_config` для даемона.

Кроме того, параметры sshd_program (по умолчанию `/usr/sbin/sshd`), и sshd_flags `rc.conf` дают дополнительные возможности настройки.

## 14.12.6. ssh-keygen

Вместо использования паролей, с помощью ssh-keygen(1) пользователи могут аутентифицироваться ключами RSA:

    % ssh-keygen -t rsa1
    Initializing random number generator...
    Generating p:  .++ (distance 66)
    Generating q:  ..............................++ (distance 498)
    Computing the keys...
    Key generation complete.
    Enter file in which to save the key (/home/user/.ssh/identity):
    Enter passphrase:
    Enter the same passphrase again:
    Your identification has been saved in /home/user/.ssh/identity.
    ...

ssh-keygen(1) создаст пару публичного и приватного ключей, используемых для аутентификации. Приватный ключ сохраняется в `~/.ssh/identity`, а публичный в `~/.ssh/identity.pub`. Для включения аутентификации по ключам публичный ключ должен быть помещен в `~/.ssh/authorized_keys` на удаленном компьютере.

Это позволяет соединяться с удаленным компьютером с помощью RSA аутентификации вместо паролей.

> Замечание: Параметр -t rsa1 приведет к созданию RSA ключей, используемых SSH протоколом версии 1. Если вы хотите использовать RSA ключи с SSH протоколом версии 2, используйте команду `ssh-keygen -t rsa`.

Если при генерации ключей был использован пароль, каждый раз для при использовании приватного ключа он будет запрашиваться у пользователя.

DSA ключ для SSH протокола версии 2 может быть создан в тех же целях командой `ssh-keygen -t dsa`. Эта команда создаст публичный/приватный ключи DSA для использования только с SSH протоколом версии 2. Публичный ключ сохраняется в `~/.ssh/id_dsa.pub`, а приватный ключ в `~/.ssh/id_dsa`.

Публичный ключ DSA также должен быть помещен в каталог `~/.ssh/authorized_keys` на удаленном компьютере.

Утилиты ssh-agent(1) и ssh-add(1) используются для управления множеством защищенных паролем приватных ключей.

> Внимание: Параметры и имена файлов могут различаться для разных версий OpenSSH, установленных в системе, для решения проблем обратитесь к странице справочника ssh-keygen(1).

## 14.12.7. SSH тунеллирование

OpenSSH поддерживает возможность создания туннеля для пропуска соединения по другому протоколу через защищенную сессию.

Следующая команда указывает ssh(1) создать туннель для telnet:

    % ssh -2 -N -f -L 5023:localhost:23 user@foo.example.com
    %

Команда `ssh` используется со следующими параметрами:

-2

  Указывает `ssh` использовать версию 2 протокола (не используйте этот параметр, если работаете со старыми SSH серверами).

-N

  Означает использование в не-командном режиме, только для тунеллирования. Если этот параметр опущен, `ssh` запустит обычную сессию.

-f

  Указывает `ssh` запускаться в фоновом режиме.

-L

  Означает локальный туннель в стиле localport:remotehost:remoteport.

user@foo.example.com

  Удаленный сервер SSH.

Туннель SSH создается путем создания прослушивающего сокета на определенном порту `localhost`. Затем все принятые на локальном хосту/порту соединения переправляются на через SSH на определенный удаленный хост и порт.

В этом примере, порт 5023 на `localhost` перенаправляется на порт 23 на `localhost` удаленного компьютера. Поскольку 23 это порт telnet, будет создано защищенное соединение telnet через туннель SSH.

Этот метод можно использовать для любого числа небезопасных протоколов, таких как SMTP, POP3, FTP, и так далее.

Пример 14-1. Использование SSH для создания защищенного туннеля на SMTP

    % ssh -2 -N -f -L 5025:localhost:25 user@mailserver.example.com
    user@mailserver.example.com's password: *****
    % telnet localhost 5025
    Trying 127.0.0.1...
    Connected to localhost.
    Escape character is '^]'.
    220 mailserver.example.com ESMTP

Этот метод можно использовать вместе с ssh-keygen(1) и дополнительными пользовательскими учетными записями для создания более удобного автоматического SSH тунеллирования. Ключи могут быть использованы вместо паролей, и туннели могут запускаться от отдельных пользователей.

### 14.12.7.1. Практические примеры SSH тунеллирования

#### 14.12.7.1.1. Защищенный доступ к серверу POP3

На работе находится SSH сервер, принимающий соединения снаружи. В этой же офисной сети находится почтовый сервер, поддерживающий протокол POP3. Сеть или сетевое соединение между вашим домом и офисом могут быть или не быть полностью доверяемыми. По этой причине вам потребуется проверять почту через защищенное соединение. Решение состоит в создании SSH соединения к офисному серверу SSH и тунеллирование через него к почтовому серверу.

    % ssh -2 -N -f -L 2110:mail.example.com:110 user@ssh-server.example.com
    user@ssh-server.example.com's password: ******

Когда туннель включен и работает, вы можете настроить почтовый клиент для отправки запросов POP3 на `localhost`, порт 2110. Соединение будет безопасно переправлено через туннель на `mail.example.com`.

#### 14.12.7.1.2. Прохождение через Драконовский Брандмауэр

Некоторые сетевые администраторы устанавливают на межсетевых экранах (брандмауэрах) драконовские правила, фильтруя не только входящие соединения, но и исходящие. Вам может быть разрешен доступ к удаленным компьютерам только по портам 22 и 80, для SSH и просмотра сайтов.

Вам может потребоваться доступ к другому (возможно, не относящемуся к работе) сервису, такому как Ogg Vorbis для прослушивания музыки. Если этот сервер Ogg Vorbis выдает поток не с портов 22 или 80, вы не сможете получить к нему доступ.

Решение состоит в создании SSH соединения с компьютером вне межсетевого экрана и использование его для тунеллирования сервера Ogg Vorbis.

    % ssh -2 -N -f -L 8888:music.example.com:8000 user@unfirewalled-system.example.org
    user@unfirewalled-system.example.org's password: *******

Клиентскую программу теперь можно настроить на `localhost` порт 8888, который будет перенаправлен на `music.example.com` порт 8000, успешно обойдя межсетевой экран.

## 14.12.8. Для дальнейшего чтения

OpenSSH

ssh(1) scp(1) ssh-keygen(1) ssh-agent(1) ssh-add(1)

sshd(8) sftp-server(8)

Пред. | Начало | След.
VPN через IPsec | Уровень выше | Списки контроля доступа файловой системы (ACL)

Этот, и другие документы, могут быть скачаны с ftp://ftp.FreeBSD.org/pub/FreeBSD/doc/.

По вопросам связанными с FreeBSD, прочитайте документацию прежде чем писать в <questions@FreeBSD.org>.
По вопросам связанным с этой документацией, пишите <doc@FreeBSD.org>.
По вопросам связанным с русским переводом документации, пишите в рассылку <frdp@FreeBSD.org.ua>.
Информация по подписке на эту рассылку находится на сайте проекта перевода.