System Administration Toolkit. Установка в UNIX удаленного доступа через OpenSSH

В этой статье рассказывается про использование OpenSSH для обеспечения безопасной среды работы удаленного терминала.

Мартин Браун, внештатный автор, консультант

Мартин Браун (Martin Brown) пишет статьи уже более семи лет. Он является автором многочисленных книг и статей по различным темам. Его квалификация охватывает множество платформ и языков разработки - Perl, Python, Java™, JavaScript, Basic, Pascal, Modula-2, C, C++, Rebol, Gawk, Shellscript, Windows®, Solaris, Linux, BeOS, Mac OS X и т.д., а также Web-программирование, системное управление и интеграция. Мартин является внутренним экспертом (SME) компании Microsoft® и регулярно пишет для ServerWatch.com, LinuxToday.com и IBM developerWorks. Он также принимает участие в блогах Computerworld, The Apple Blog и на других сайтах. Связаться с ним можно через его Web-сайт.



10.05.2007

Об этой серии статей

Обычный администратор 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 предоставляется и как часть операционной системы.

Для сборки Вам понадолбится следующее:

  • Компилятор C (GNU C compiler (gcc) или что-то подобное)
  • Zlib -- библиотека сжатия данных
  • OpenSSL -- Secure Sockets Layer (SSL), библиотека безопасности

Если Вы захотите работать с конфигурационными установками по умолчанию, то осуществите обычную последовательность сборки. Она показана в листинге 1.

Листинг 1. Обычная последовательность сборки
$ ./configure
$ make
$ make install

Биарные коды, библиотеки и конфигурационные файлы будут установлены в папке /usr/local, например, /usr/local/bin для бинарников и /usr/local/etc для конфигурационных файлов. Если Вам понадобится интеграция этих инструментов с Вашей основной системной средой, то Вы можете указать опцию --prefix, которая задает базовую папку, и опцию --sysconfdir, которая задает локацию для конфигурационных файлов:

$ ./configure --prefix=/usr --sysconfidir=/etc/ssh

Некоторые другие основные опции:

  • --with-tcp-wrappers -- Эта опция потребуется для интеграции с системой безопасности упаковщика TCP.
  • --with-ssl-dir=DIR -- Эта опция указывает локацию библиотек OpenSSL.
  • --with-pid-dir=DIR -- Эта опция указывает локацию PID файла, в котором сохраняются ID процессов для демона sshd.
  • --with-xauth=DIR -- Эта опция указывает локацию команды xauth, которая используется для X аутентификации.

Когда конфигурация произведена, сборка происходит, как правило, с помощью команды make.

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

$ make host-key

В качестве альтернативы Вы можете осуществить все необходимые шаги вручную через командную строку. Вам нужно создать три ключа(по одному для каждого из трех главных шифровальных алгоритмов: rsa1, rsa, and dsa). Например, в листинге 2 показано, как создавать rsa1.

Листинг 2. Создание ключа rsa1
$ ssh-keygen -t rsa1 -f /etc/ssh/ssh_host_key
Generating public/private rsa1 key pair.
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in /etc/ssh//ssh_host_key.
Your public key has been saved in /etc/ssh//ssh_host_key.pub.
The key fingerprint is:
43:aa:58:3c:d8:30:de:43:af:66:2a:b2:8d:02:08:86 root@remotehost

Система запрашивает у Вас идентификационную фразу. Для ключей хоста она Вам вероятно не будет нужна, так что Вы можете просто нажать Enter, чтобы выбрать пустую идетификационную фразу. В качестве еще одного варианта, Вы можете ускорить процесс использовав опцию -N в командной строке (см. листинг 3).

Listing 3. Использование опции -Nдля ускорения процесса создания ключа
$ ssh-keygen -t rsa1 -f /etc/ssh/ssh_host_key -N ""
Generating public/private rsa1 key pair.
Your identification has been saved in /etc/ssh/ssh_host_key.
Your public key has been saved in /etc/ssh/ssh_host_key.pub.
The key fingerprint is:
a3:e3:21:4f:b5:9f:ff:05:46:66:bc:36:a1:47:a0:64 root@remotehost

Теперь повторите то же самое для создания ключей rsa и dsa (см. листинг 4).

Листинг 4. Создание ключей rsa и dsa
$ 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) и скрытый ключ. Вам следует убедиться в том, что скрытые ключи читаются только системным администратором и процессами SSH -- такая конфигурация должна произойти автоматически. Возможно, Вам захочется скопировать открытые ключи в центральную общую локацию в Network File System (NFS), чтобы дать возможность пользователям добавлять новые ключи в список ключей хоста.

Наконец, Вам понадобится стартовать процесс sshd и сконфигурировать его так, чтобы он запускался при загрузке компьютера. Для хостов Linux в contrib/redhat/sshd.init вы можете найти подходящий инициализационный скрипт, который добавляется в /etc/init.d .


Использование SSH для базового терминального доступа

Основное предназначение OpenSSH заключается в том, чтобы служить альтернативой, причем безопасной, протоколу Telnet для удаленного входа в систему хоста UNIXили Linux.

Для соединения с удаленным хостом, использующим стандартный shell, Вам будет достаточно просто набрать имя этого хоста:

$ ssh remotehost

Система, по умолчанию, попытается использовать Ваше текущее имя пользователя как логин. Для того, чтобы использовать иной логин, введите его перед именем хоста и разделите их символом @. Например:

$ ssh mc@remotehost

Далее система запросит у Вас пароль пользователя -- так же, как в Telnet.

При первом соединении с данным хостом система спросит у Вас, не хотите ли Вы сохранить копию открытого ключа этого хоста в Вашем файле со списком известных хостов (см. листинг 5).

Листинг 5. Файл со списком известных хостов
$ ssh root@remotehost
The authenticity of host 'remotehost (10.211.55.3)' can't be established.
RSA key fingerprint is cc:c8:8b:75:3d:b6:00:2f:a9:9c:53:4c:03:0f:3d:1b.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added 'remotehost' (RSA) to the list of known hosts.

В будущем Вы не будете получать это предупреждение, кроме того случая, когда система обнаруживает различие между возвращенным хостом открытым ключом и открытым ключом этого хоста из Вашего файла. Это может указывать на потенциальную попытку взлома. Также это может означать, что администратор попросту обновил ключи хоста.

По сути, нет никаких различий между сеансами SSH и Telnet, кроме того, что сессия SSH зашифрована, что практически исключает возможность 'подглядывать' в нее и определять Ваш пароль, команды и операции, которые Вы осуществляете.

Вы можете также использовать SSH, чтобы запустить команду прямо на удаленном хосте без изпользования shell. В листинге 6, показано, как запустить команду who на удаленном хосте.

Листинг 6. Запуск команды who на удаленном хосте
$ ssh mc@remotehost who
admin    console  Nov 23 14:04 
mc       ttyp1    Dec  2 10:53 (sulaco.mcslp.pri)
mc       ttyp2    Dec 10 06:50 (sulaco.mcslp.pri)
admin    ttyp3    Dec 12 13:33 
mc       ttyp4    Dec 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 remotehost

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

$ sftp mc@remotehost

Хотя SFTP работает похоже на FTP, есть все же некоторые отличия и ограничения. Например, команда dir в FTP выдает полный листинг файлов (см. листинг 8).

Листинг 8. Команда dir в FTP выдает полный листинг файлов
ftp> dir
502 'EPSV': command not understood.
227 Entering Passive Mode (192,168,0,110,150,159)
150 Opening ASCII mode data connection for directory listing.
total 1472
drwx------   3 mc        staff   102 Nov  4 11:17 Desktop
drwx------   3 mc        staff   102 Nov  4 11:17 Documents
drwx------  18 mc        staff   612 Nov  5 18:01 Library
drwx------   3 mc        staff   102 Nov  4 11:17 Movies
drwx------   3 mc        staff   102 Nov  4 11:17 Music
drwx------   4 mc        staff   136 Nov  4 11:17 Pictures
drwxr-xr-x   4 mc        staff   136 Nov  4 11:17 Public
drwxr-xr-x   6 mc        staff   204 Nov  4 11:17 Sites
drwxrwxrwx   3 root      staff   102 Dec 24 07:30 tmp
drwxr-xr-x   7 root      staff   238 Dec 11 08:39 trial
226 Transfer complete.

В рамках SFTP, однако, команда dir синонимична команде выдачи листинга содержимого текущей папки хоста. В UNIX или Linux это команда ls. По умолчанию, dir выдает лишь краткий листинг (см. листинг 9).

Листинг 9. Команда dir в SFTP выдает лишь краткий листинг
sftp> dir
Desktop    Documents  Library    Movies     Music      Pictures   Public     
Sites      tmp        trial

Для выдачи полного листинга, используйте те же самые опции, что и у команды ls (см. листинг 10).

Листинг 10. Полный листинг
sftp> dir -l
drwx------    3 mc       staff         102 Nov  4 11:17 Desktop
drwx------    3 mc       staff         102 Nov  4 11:17 Documents
drwx------   18 mc       staff         612 Nov  5 18:01 Library
drwx------    3 mc       staff         102 Nov  4 11:17 Movies
drwx------    3 mc       staff         102 Nov  4 11:17 Music
drwx------    4 mc       staff         136 Nov  4 11:17 Pictures
drwxr-xr-x    4 mc       staff         136 Nov  4 11:17 Public
drwxr-xr-x    6 mc       staff         204 Nov  4 11:17 Sites
drwxrwxrwx    3 root     staff         102 Dec 24 07:30 tmp
drwxr-xr-x    7 root     staff         238 Dec 11 08:39 trial

Другие команды в SFTP имеют тот же вид, что и в FTP, в том числе команды смены папки(cd и lcd для локальной машины), создания папки (mkdir), отправки (put) и получения файлов (get).Что касается последних двух команд, put и get, то обе они допускают использование групповых символов (похоже на mput и mget в FTP), но будьте осторожны при передаче через SFTP множества файлов без использования группового символа. Например, sftp> mget file1 file2 file3 воспринимается как попытка взять файлы file1 и file2 и поместить их в локальную папку file3, котоой, вероятно, не существует.


Использование 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.

Листинг 11. Создание ключа
$ ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa):

Вам нужно ввести адрес и имя файла, в котором Вы хотите сохранить ключ (как его открытую, так и скрытую компоненты). Обычно не возникает проблем, если воспользоваться предлагаемым по умолчанию вариантом - файл в папке .ssh вашего домашнего каталога (см. листинг 12).

Листинг 12. Запрос ввода идентификационной фразы
Created directory '/root/.ssh'.
Enter passphrase (empty for no passphrase):

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

Листинг 13. Игнорирование запроса пароля путем нажатия клавиши ввода
Enter same passphrase again: 
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
The key fingerprint is:
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).

Листинг 14. Разрешение автоматического входа в систему
$ cat ./.ssh/id_rsa.pub | ssh mc@remotehost 'cat >> .ssh/authorized_keys';

Если вам приходится осуществлять все эти операции довольно часто на различных хостах, то лучше всего использовать небольшой скрипт или функцию shell, которая выполнит все необходимые шаги за Вас, как показано в листинге 15.

Листинг 15. Использование скрипта shell для разрешения автоматического входа в систему
OLDDIR='pwd';
if [ -z "$1" ]; then
    echo Need user@host info;
    exit;
fi;
cd $HOME;
if [ -e "./.ssh/id_rsa.pub" ]; then
    cat ./.ssh/id_rsa.pub | ssh $1 'cat >> .ssh/authorized_keys';
else
    ssh-keygen -t rsa;
    cat ./.ssh/id_rsa.pub | ssh $1 'cat >> .ssh/authorized_keys';
fi;
cd $OLDDIR

При использовании скрипта setremotekey, устанавливающего ключ на удаленной машине, Вы можете скопировать существующий ключ, а если он не существует, создать его до копирования:

$ setremotekey mc@remotehost

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


Резюме

OpenSSH - это инструмент, который обеспечивает безопасную связь и передачу информации между машинами. Он не только представляет собой более надежную альтернативу таким распространенным средствам, как Telnet, FTP, и RCP, но также может служить транспортным протоколом для других сервисов, вроде Subversion, X Windows System и rsync. В этой статье было рассмотрено, как осуществлять основные шаги по установке и использованию OpenSSH, как наилучшим образом использовать те основные возможности, которые предоставляет этот инструмент, и как использовать обмен ключей между хостами для упрощения процесса входа в систему и установки связи.

Ресурсы

Научиться

Получить продукты и технологии

  • OpenSSH Web: You can get OpenSSH here.
  • OpenSSL: Скачайте OpenSSL с этого сайта.
  • Zlib: Zlib входит в набор утилит Gzip.
  • AIX toolkit: OpenSSH теперь входит в стандартный набор инструментов AIX.
  • Пробное программное обеспечение IBM : Создайте новый проект Вашей разработки при помощи программного обеспечения, преднозначенного для загрузки непосредственно с developerWorks.

Обсудить

Комментарии

developerWorks: Войти

Обязательные поля отмечены звездочкой (*).


Нужен IBM ID?
Забыли Ваш IBM ID?


Забыли Ваш пароль?
Изменить пароль

Нажимая Отправить, Вы принимаете Условия использования developerWorks.

 


Профиль создается, когда вы первый раз заходите в developerWorks. Информация в вашем профиле (имя, страна / регион, название компании) отображается для всех пользователей и будет сопровождать любой опубликованный вами контент пока вы специально не укажите скрыть название вашей компании. Вы можете обновить ваш IBM аккаунт в любое время.

Вся введенная информация защищена.

Выберите имя, которое будет отображаться на экране



При первом входе в developerWorks для Вас будет создан профиль и Вам нужно будет выбрать Отображаемое имя. Оно будет выводиться рядом с контентом, опубликованным Вами в developerWorks.

Отображаемое имя должно иметь длину от 3 символов до 31 символа. Ваше Имя в системе должно быть уникальным. В качестве имени по соображениям приватности нельзя использовать контактный e-mail.

Обязательные поля отмечены звездочкой (*).

(Отображаемое имя должно иметь длину от 3 символов до 31 символа.)

Нажимая Отправить, Вы принимаете Условия использования developerWorks.

 


Вся введенная информация защищена.


static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=40
Zone=AIX и UNIX
ArticleID=219211
ArticleTitle=System Administration Toolkit. Установка в UNIX удаленного доступа через OpenSSH
publish-date=05102007