Используйте OpenSSH, чтобы обеспечить безопасную среду для запуска удаленных терминалов. Базовое использование OpenSSH и терминала очень простое, но в этой статье также будут рассмотрены другие элементы, обеспечивающие автоматический вход на удаленные хосты, способы запуска удаленных приложений и способы безопасного копирования файлов между хостами.
Об этой серии
Типичный администратор UNIX® имеет набор ключевых утилит, ноу-хау и систем, которые часто используются для помощи в административном процессе. Существуют различные ключевые утилиты, цепочки командной строки и сценарии для оптимизации различных процессов. Некоторые из этих инструментов взяты из операционной системы, но большая часть ноу-хау основана на многолетнем опыте и необходимости снизить нагрузку на работу системного администратора. В этой серии статей основное внимание уделяется максимально эффективному использованию инструментов, доступных в различных средах UNIX, включая способы упрощения задач администрирования в гетерогенных средах.
Зачем использовать OpenSSH?
Стандартные сетевые сервисы, которыми вы пользуетесь каждый день, такие как FTP, Telnet, RCP, Remote Shell (rsh) и т. д., хорошо работают в закрытой среде, однако информация, передаваемая по сети с помощью этих сервисов, не зашифрована. Любой, кто использует анализатор пакетов в вашей сети или на удаленном компьютере, может просмотреть обмениваемую информацию, а иногда даже информацию о пароле.
Более того, во всех подобных сервисах возможности автоматизации процесса входа в систему ограничены и часто основаны на встраивании простого текстового пароля в командную строку для выполнения операторов, что делает процесс входа в систему еще более небезопасным.
Протокол Secure Shell (SSH) был разработан для обхода этих ограничений. SSH обеспечивает шифрование всего канала связи, включая обмен учетными данными для входа и пароля, а также работает с открытыми и закрытыми ключами для обеспечения автоматической аутентификации при входе в систему. Вы также можете использовать SSH в качестве основного транспортного протокола. Использование SSH таким образом означает, что после открытия безопасного соединения можно обмениваться всеми типами информации по зашифрованному каналу, и даже HTTP и SMTP могут использовать этот метод для защиты механизма связи.
OpenSSH — это бесплатная реализация протоколов SSH 1 и SSH 2. Первоначально он был разработан как часть операционной системы OpenBSD (Berkeley Software Distribution), а теперь выпущен как общее решение для UNIX или Linux® и подобных операционных систем.
Установить OpenSSH
OpenSSH — бесплатное программное обеспечение, которое можно загрузить с основного веб-сайта OpenSSH (см. Ресурсы). Системы OpenSSH могут быть созданы из исходного кода в различных системах, включая Linux, HP-UX, AIX®, Solaris, Mac OS X и других. Обычно можно найти предварительно скомпилированные двоичные файлы для выбранной вами платформы и версии. Некоторые поставщики даже предоставляют наборы инструментов OpenSSH как часть операционной системы.
Для сборки OpenSSH вам понадобится следующее:
Если вам нужно использовать настройки конфигурации по умолчанию, используйте обычную последовательность сборки, как показано в листинге 1 ниже.
$ ./настроить $ сделать $ сделать установку |
При этом двоичные файлы, библиотеки и файлы конфигурации устанавливаются в каталог /usr/local, например двоичные файлы — в /usr/local/bin, а файлы конфигурации — в /usr/local/etc. Если вы хотите интегрировать различные инструменты в основную среду, вам может потребоваться указать параметр --prefix для установки базового каталога и параметр --sysconfdir для установки местоположения файла конфигурации:
$ ./configure --prefix=/usr --sysconfidir=/etc/ssh |
Некоторые другие общие параметры, которые вы можете указать, включают:
После завершения настройки используйте make для сборки обычным способом.
После завершения процесса сборки и установки вам необходимо настроить систему, сначала создав ключ SSH, который однозначно идентифицирует систему, а затем включив безопасную связь между клиентом и хостом. Вы можете запустить:
$ сделать хост-ключ |
Альтернативно вы можете выполнить отдельные шаги вручную в командной строке. Вам необходимо создать три ключа (по одному для каждого из основных алгоритмов шифрования: rsa1, rsa и dsa). Например, в листинге 2 показано, как создать ключ rsa1.
$ ssh-keygen -t rsa1 -f /etc/ssh/ssh_host_key Генерация пары открытого/частного ключей rsa1. Введите парольную фразу (пусто, если парольная фраза отсутствует): Введите ту же парольную фразу еще раз: Ваши идентификационные данные сохранены в файле /etc/ssh//ssh_host_key. Ваш открытый ключ сохранен в /etc/ssh//ssh_host_key.pub. Ключевой отпечаток пальца: 43:aa:58:3c:d8:30:de:43:af:66:2a:b2:8d:02:08:86 root@remotehost |
Вам будет предложено ввести пароль. Для ключа хоста вам, вероятно, не понадобится пароль ключа, поэтому вы можете нажать Return, чтобы использовать пустой пароль. Альтернативно вы можете использовать опцию -N в командной строке, чтобы ускорить процесс (см. листинг 3).
$ ssh-keygen -t rsa1 -f /etc/ssh/ssh_host_key -N "" Генерация пары открытого/частного ключей rsa1. Ваши идентификационные данные сохранены в файле /etc/ssh/ssh_host_key. Ваш открытый ключ сохранен в /etc/ssh/ssh_host_key.pub. Ключевой отпечаток пальца: a3:e3:21:4f:b5:9f:ff:05:46:66:bc:36:a1:47:a0:64 root@remotehost |
Теперь повторите процесс для создания ключей rsa и dsa (см. листинг 4).
$ ssh-keygen -t rsa -f /etc/ssh/ssh_host_rsa_key -N "" $ ssh-keygen -t dsa -f /etc/ssh/ssh_host_dsa_key -N "" |
Это создаст два файла для каждого типа ключа: открытый ключ (в файле, заканчивающемся на .pub) и закрытый ключ. Вы должны убедиться, что закрытый ключ читается только процессами root и SSH — это должно быть настроено автоматически. Возможно, вы захотите скопировать открытый ключ в центральное расположение на общем ресурсе сетевой файловой системы (NFS), чтобы люди могли добавить его в список известных ключей хоста.
Наконец, вам нужно запустить процесс sshd и настроить его на выполнение при запуске. Для хостов Linux вы можете найти соответствующий сценарий инициализации в contrib/redhat/sshd.init, который можно добавить в /etc/init.d.
Использование SSH для базового доступа к терминалу
Основная роль OpenSSH — инструмент SSH, безопасная альтернатива протоколу Telnet для безопасного удаленного входа в систему на хостах UNIX или Linux.
Чтобы подключиться к удаленному хосту с помощью стандартной оболочки, вы просто вводите имя хоста:
$ SSH удаленный хост |
По умолчанию система пытается использовать текущее имя пользователя в качестве имени для входа. Чтобы использовать другое имя для входа, перед именем хоста укажите имя для входа, разделенное символом @. Например:
$ ssh mc@remotehost |
Вам будет предложено ввести пароль пользователя — это похоже на Telnet.
При первом подключении к хосту вас спросят, хотите ли вы сохранить копию открытого ключа удаленного хоста в файле «известных хостов» (см. листинг 5).
$ ssh root@remotehost Подлинность хоста «remotehost (10.211.55.3)» не может быть установлена. Отпечаток ключа RSA: cc:c8:8b:75:3d:b6:00:2f:a9:9c:53:4c:03:0f:3d:1b. Вы уверены, что хотите продолжить подключение (да/нет) да? Предупреждение: удаленный хост (RSA) навсегда добавлен в список известных хостов. |
В дальнейшем вы не будете получать это предупреждение, но предупреждение будет выдаваться, когда система обнаружит, что открытый ключ, возвращаемый удаленным хостом, не соответствует открытому ключу в файле хоста, что указывает на возможную хакерскую атаку. Это также может означать, что администратор только повторно сгенерировал ключ хоста.
По сути, нет никакой разницы между сеансами SSH и Telnet, за исключением того, что сеансы SSH зашифрованы, что делает практически невозможным прослушивание вашего сеанса или знание вашего пароля или команд и операций, которые вы выполняете.
Вы также можете использовать SSH для запуска команд непосредственно на удаленном хосте без использования оболочки. Например, чтобы запустить команду who на удаленном хосте, см. листинг 6.
Листинг 6. Запуск команды who на удаленном хосте$ ssh mc@remotehost кто консоль администратора 23 ноября 14:04 mc ttyp1 2 дек. 10:53 (sulaco.mcslp.pri) mc ttyp2 10 декабря 06:50 (sulaco.mcslp.pri) админ ttyp3 12 дек 13:33 mc ttyp4 15 декабря 12:38 (nautilus.mcslp.p) |
Удаленное выполнение также эмулирует стандартный ввод, вывод и ошибку клиентского хоста. Это означает, что вы можете перенаправить вывод на удаленную команду. Например, вы можете добавить информацию непосредственно в удаленный файл, передав вывод команды по SSH на удаленном хосте (см. листинг 7).
Листинг 7. Добавление информации непосредственно в удаленный файл$ echo "Hello World" |ssh mc@remotehost 'cat >> helloworlds.txt' |
Вы можете использовать этот метод, чтобы повысить производительность при использовании SSH и упростить процесс входа в систему.
Обмен файлами с помощью SFTP
Команда sft является альтернативой FTP, которая использует безопасный канал связи, предоставляемый протоколом SSH.
Чтобы открыть SFTP-соединение, укажите имя хоста в командной строке:
$ удаленный хост sftp |
Имейте в виду, что приведенная выше команда предполагает, что вы хотите использовать тот же метод входа, что и ваш текущий хост. Чтобы использовать другой метод входа в систему, добавьте к имени хоста имя пользователя:
$ sftp mc@remotehost |
Хотя SFTP работает аналогично FTP, существуют некоторые ограничения и различия. Например, команда dir в FTP предоставляет длинный список файлов (см. листинг 8).
FTP> каталог 502 «EPSV»: команда не понята. 227 Вход в пассивный режим (192,168,0,110,150,159) 150 Открытие соединения для передачи данных в режиме ASCII для просмотра списка каталогов. всего 1472 drwx------ 3 mc Staff 102 4 нояб. 11:17 Рабочий стол drwx------ 3 сотрудника MC 102 4 ноября 11:17 Документы drwx------ 18 сотрудников MC 612 5 ноября 18:01 Библиотека drwx------ 3 mc Staff 102 4 ноября 11:17 Кино drwx------ 3 mc Staff 102 4 ноя 11:17 Музыка drwx------ 4 mc Staff 136 4 ноя 11:17 Картинки drwxr-xr-x 4 mc Staff 136 4 ноября 11:17 Публичный drwxr-xr-x 6 mc Staff 204 4 ноября 11:17 Сайты drwxrwxrwx 3 корневой персонал 102 24 декабря 07:30 tmp drwxr-xr-x 7 корневой персонал 238 11 декабря 08:39 пробная версия 226 Передача завершена. |
В SFTP dir действует как псевдоним команды вывода списка каталогов хоста, которая в UNIX или Linux называется ls. По умолчанию dir предоставляет только краткий список (см. листинг 9).
sftp> каталог Рабочий стол Документы Библиотека Фильмы Музыка Картинки Публичные Пробная версия tmp для сайтов |
Чтобы получить длинный список, используйте те же параметры, что и ls (см. листинг 10).
sftp> каталог -l drwx------ 3 mc Staff 102 4 нояб. 11:17 Рабочий стол drwx------ 3 сотрудника MC 102 4 ноября 11:17 Документы drwx------ 18 сотрудников MC 612 5 ноября 18:01 Библиотека drwx------ 3 mc Staff 102 4 ноября 11:17 Кино drwx------ 3 mc Staff 102 4 ноя 11:17 Музыка drwx------ 4 mc Staff 136 4 ноя 11:17 Картинки drwxr-xr-x 4 mc Staff 136 4 ноября 11:17 Публичный drwxr-xr-x 6 mc Staff 204 4 ноября 11:17 Сайты drwxrwxrwx 3 корневой персонал 102 24 декабря 07:30 tmp drwxr-xr-x 7 корневой персонал 238 11 декабря 08:39 пробная версия |
Другие команды, такие как изменение каталогов (cd, lcd локально), создание каталогов (mkdir), а также отправка (put) и получение (get) файлов, остаются неизменными. Последние две команды, put и get, принимают подстановочные знаки (аналогично mput и mget в FTP), но будьте осторожны при передаче нескольких файлов без подстановочных знаков по SFTP. Например, команда sftp> mget file1 file2 file3 распознается как попытка получить файл1 и файл2 и поместить их в локальный каталог файл3, но этот каталог может не существовать.
Копирование файлов между хостами с помощью scp
Команда scp работает аналогично команде rc, за исключением того, что для передачи файлов она использует протокол SSH. При передаче файлов, связанных с содержимым, или автоматическом обмене файлами в Интернете scp намного лучше.
Его формат аналогичен rcp; вы указываете путь к файлу, в который необходимо скопировать, и при необходимости имя хоста должно быть объединено с ним. Например, чтобы скопировать файл .bashrc с удаленного хоста на локальный компьютер, используйте:
$ scp Remotehost:/users/mc/.bashrc ~/.bashrc |
Как и раньше, чтобы указать имя пользователя, перед хостом укажите имя пользователя, разделенное символом @:
$ scp mc@remotehost:/users/mc/.bashrc ~/.bashrc |
Предполагая, что пользователь, к которому вы подключаетесь, имеет разрешения на чтение, вам также потребуется использовать метасимвол ~ для доступа к информации в вашем домашнем каталоге.
$ scp mc@remotehost:~mc/.bashrc ~/.bashrc |
Чтобы скопировать из домашнего каталога вошедшего в систему пользователя, используйте:
$ scp mc@remotehost:.bashrc ~/.bashrc |
Команда scp также поддерживает стандартные правила расширения. Итак, чтобы скопировать все файлы .bash*, вы можете использовать:
$ scp mc@remotehost:.bash* ~ |
Вы даже можете выбрать отдельные файлы более конкретно, используя раскрывающиеся скобки ({}):
$ scp mc@remotehost:".bash{rc,_path,_aliases,_vars}" ~ |
Обратите внимание, что раскрывающиеся скобки в пути к файлу (а не полное выражение удаленного пути) заключены в двойные кавычки.
Во всех приведенных выше примерах вам будет предложено ввести пароль удаленного хоста. Этого можно избежать, предоставив хосту открытую часть вашего личного ключа.
Включить автоматический вход с использованием открытого ключа
Когда вы входите в удаленную систему с помощью ssh, sftp или scp, вам все равно понадобится пароль для завершения процесса входа. Создав открытый или закрытый ключ, добавив открытую часть ключа в файл ~/.ssh/authorized_keys и обменяв действительный ключ с удаленным сайтом, вы можете исключить необходимость предоставления пароля и разрешить автоматический вход в систему.
Чтобы создать открытый или закрытый ключ, вам необходимо использовать ssh-keygen, чтобы указать тип шифрования ключа. В демонстрации используется тип ключа rsa, но допустимы и другие типы ключей. Чтобы создать ключ, см. листинг 11.
$ ssh-keygen-trsa Генерация пары публичных/частных ключей RSA. Введите файл, в котором следует сохранить ключ (/root/.ssh/id_rsa): |
Вам следует ввести местоположение файла, содержащего ключи (открытый и закрытый компоненты). Использование значения по умолчанию (в каталоге .ssh вашего домашнего каталога) обычно подходит (см. листинг 12).
Создан каталог «/root/.ssh». Введите парольную фразу (пусто, если парольная фраза отсутствует): |
Если вы введете пароль на этом этапе, будет создан файл ключа безопасности, но вы также должны вводить пароль каждый раз, когда используете ключ. Нажатие клавиши Return означает, что пароль не требуется (листинг 13).
Листинг 13. Пропуск требования пароля нажатием клавиши ReturnВведите ту же парольную фразу еще раз: Ваши идентификационные данные сохранены в /root/.ssh/id_rsa. Ваш открытый ключ сохранен в /root/.ssh/id_rsa.pub. Ключевой отпечаток пальца: 98:da:8d:48:a8:09:44:b1:b3:62:51:2d:a9:6b:61:ba root@remotehost |
Открытый ключ (id_rsa.pub) и соответствующий закрытый ключ (id_rsa) теперь созданы.
Чтобы включить автоматический вход в систему, необходимо скопировать содержимое открытого ключа в файлauthorized_keys в каталоге ~/.ssh на удаленном хосте. Вы можете автоматизировать это с помощью SSH (листинг 14).
$ cat ./.ssh/id_rsa.pub | ssh mc@remotehost 'cat >> .ssh/authorized_keys'; |
Кроме того, если вы часто делаете это на нескольких хостах, вы можете использовать небольшой скрипт или функцию оболочки для выполнения всех необходимых шагов, как показано в листинге 15.
OLDDIR = 'pwd'; если [ -z "$1" ]; echo Нужна информация о пользователе@хосте; Выход; фи; компакт-диск $HOME; если [ -e "./.ssh/id_rsa.pub" ]; кот ./.ssh/id_rsa.pub | ssh $1 'cat >> .ssh/authorized_keys'; еще ssh-keygen -trsa; кот ./.ssh/id_rsa.pub | ssh $1 'cat >> .ssh/authorized_keys'; фи; компакт-диск $OLDDIR |
Вы можете использовать скрипт setremotekey для копирования существующего ключа или, если ключ не существует, создать его перед копированием:
$ setremotekey mc@remotehost |
Теперь, когда вам нужно войти на удаленный хост с помощью открытого ключа, вы можете использовать сценарий личного ключа в сочетании со списком ключей, принятых этим пользователем на удаленном хосте.
Подвести итог
OpenSSH — важный инструмент, обеспечивающий безопасность связи и передачи информации между компьютерами. Это не только безопасная альтернатива традиционным инструментам, таким как Telnet, FTP и RCP, но он также может служить транспортным протоколом для других служб, таких как Subversion, X Windows System и rsync. В этой статье показаны основные шаги, необходимые для запуска и запуска OpenSSH, как лучше всего использовать основные инструменты, предоставляемые OpenSSH, и как использовать инструменты обмена ключами для упрощения проблем входа в систему и подключения.