Библиотека сайта rus-linux.net
Настройка удаленного выполнения
Часто очень полезно выполнить команду на удаленном компьютере. Причем ввод и вывод команды осуществляются по сети.
Традиционные команды, используемые для выполнения задач на удаленных компьютерах rlogin, rsh и rcp. Пример команды rlogin приведен в главе 1. Я кратко показал проблемы защиты, связанные с этим, в разделе о защите системы в главе 1 и предложил в качестве замены пакет ssh. Он обеспечивает команды slogin, ssh и scp.
Каждая из этих команд порождает оболочку на удаленном компьютере и позволяет пользователю выполнять команды. Конечно, пользователь должен быть зарегистрирован на том удаленном компьютере, где должна быть выполнена команда. Таким образом, все эти команды используют процесс авторизации. Старые r-команды просто обменивались с удаленным компьютером именем пользователя и его паролем в открытом виде. Поэтому любая программа сетевого наблюдения легко перехватывала пароли. Пакет ssh обеспечивает более высокий уровень защиты: он использует методику Public Key Cryptography для авторизации и шифрования обменов между компьютерами, чтобы гарантировать, что ни пароли, ни другие данные сеанса не перехвачены. В принципе, их как и раньше можно перехватить, но они будут зашифрованы стойким криптоалгоритмом, так что никакой пользы перехватившему от них не будет.
Иногда желательно ослабить проверку доступа для некоторых пользователей. Например, если Вы часто должны регистрироваться на других машинах Вашей локальной сети, неплохо бы быть признанным без ввода пароля каждый раз. Это всегда было возможно с r-командами, но пакет ssh позволяет Вам сделать это немного легче. Но такой подход опасен тем, что если на одной машине логин пользователя вскрыт, это дает доступ без пароля на другие машины.
Для повышения безопасности нужно выключить r-команды и настроить ssh на работу вместо них.
Выключение r-команд
/etc/inetd.conf
. Соответствующие им строки этого
файла выглядят так:
# Shell, login, exec and talk are BSD protocols. shell stream tcp nowait root /usr/sbin/tcpd /usr/sbin/in.rshd login stream tcp nowait root /usr/sbin/tcpd /usr/sbin/in.rlogind exec stream tcp nowait root /usr/sbin/tcpd /usr/sbin/in.rexecd |
#
в
начале каждой строки. Не забудьте, что Вы должны перезапустить
inetd daemon для вступления изменений в силу.Установка и конфигурирование ssh
OpenSSH свободная версия набора программ ssh. Linux-версия есть на http://violet.ibs.com.au/openssh и во многих дистрибутивах Linux. Здесь я не буду рассматривать компиляцию: подробные указания есть в пакете с исходными текстами. Если Вы можете установить программу из откомпилированных модулей, лучше всего это сделать.
Для работы ssh нужно два компонента: клиент ssh, которого Вы должны конфигурировать и выполнить на локальном компьютере, и ssh daemon, который должен работать на удаленном компьютер, к которому нужно подключиться.
Ssh daemon
Sshd daemon это программа, которая слушает сетевые
подключения клиентов ssh, управляет авторизацией и
выполняет запрошенную команду. Он имеет один основной файл конфигурации
/etc/ssh/sshd_config
и специальный файл, содержащий
ключ, используемый при авторизации и шифровании. Каждый компьютер и каждый
пользователь имеет собственный ключ.
/etc/ssh/ssh_host_key
. Ключи могут иметь длину
512 бит или больше. По умолчанию ssh-keygen генерирует
ключи длиной 1024 бита, и большинство людей использует значение по умолчанию.
Чтобы генерировать ключ, вызовите команду ssh-keygen:
#
|
Generating RSA keys: ......oooooO...............................oooooO Key generation complete. 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: 1024 3a:14:78:8e:5a:a3:6b:bc:b0:69:10:23:b7:d8:56:82 root@moria |
В конце сказано, что два файла были созданы. Первый называется секретным
ключом, и должен быть сохранен в тайне. Он попал в файл
/etc/ssh/ssh_host_key
. Второй называется публичным
ключом и должен распространяться. Он хранится в файле
/etc/ssh/ssh_host_key.pub
.
Теперь нужно создать файл конфигурации. Пакет ssh очень мощный, и файл конфигурации может содержать много параметров. Следующий код показывает безопасный и минимальный файл конфигурации для sshd. Остальные опции детально описаны на man-странице sshd(8):
# /etc/ssh/sshd_config # The IP adddresses to listen for connections on. 0.0.0.0 means all # local addresses. ListenAddress 0.0.0.0 # The TCP port to listen for connections on. The default is 22. Port 22 # The name of the host key file. HostKey /etc/ssh/ssh_host_key # The length of the key in bits. ServerKeyBits 1024 # Should we allow root logins via ssh? PermitRootLogin no # Should the ssh daemon check users' home directory and files permissions? # are safe before allowing login? StrictModes yes # Should we allow old ~/.rhosts and /etc/hosts.equiv authentication method? RhostsAuthentication no # Should we allow pure RSA authentication? RSAAuthentication yes # Should we allow password authentication? PasswordAuthentication yes # Should we allow /etc/hosts.equiv combined with RSA host authentication? RhostsRSAAuthentication no # Should we ignore ~/.rhosts files? IgnoreRhosts yes # Should we allow logins to accounts with empty passwords? PermitEmptyPasswords no |
# |
rc
-файл или
вписать вызов в уже существующий, чтобы сервис автоматически вызывался при
начальной загрузке. Daemon выполняется автономно и не требует записи в файле
/etc/inetd.conf
. Он должен быть выполнен от имени
пользователя root
. Синтаксис очень прост:
/usr/sbin/sshd |
Клиент ssh
Имеется ряд клиентов ssh:
slogin, scp и
ssh. Они используют один файл конфигурации, обычно
/etc/ssh/ssh_config
, и файлы настроек из каталога
.ssh
в домашнем каталоге пользователя, который их
вызвал. Наиболее важные из этих файлов:
.ssh/config
, который может содержать параметры,
отменяющие заданные в /etc/ssh/ssh_config
,
.ssh/identity
, который содержит собственный
секретный ключ пользователя и .ssh/identity.pub
,
содержащий публичный ключ пользователя. Другие важные файлы:
.ssh/known_hosts
и
.ssh/authorized_keys
; они будут рассмотрены
ниже. Сначала надо
создать глобальный файл настроек и файл ключа пользователя.
Файл /etc/ssh/ssh_config
очень похож на файл
настройки сервера. Есть большое количество свойств, которые Вы можете
конфигурировать, но минимальная конфигурация приведена в
примере 12-5. Остальная
часть параметров рассмотрена на man-странице sshd(8).
Вы можете добавлять секции для конкретных компьютеров или их групп.
Параметром команды Host
может быть любое полное имя
компьютера или набор символов подстановки. В данном примере задано
соответствие всем хостам. Можно, например, создать запись
Host *.vbrew.com
, соответствующую всем хостам в
домене vbrew.com
.
Пример 12-5. Клиентский файл настроек ssh
# /etc/ssh/ssh_config # Default options to use when connecting to a remote host Host * # Compress the session data? Compression yes # .. using which compression level? (1 - fast/poor, 9 - slow/good) CompressionLevel 6 # Fall back to rsh if the secure connection fails? FallBackToRsh no # Should we send keep-alive messages? Useful if you use IP masquerade KeepAlive yes # Try RSA authentication? RSAAuthentication yes # Try RSA authentication in combination with .rhosts authentication? RhostsRSAAuthentication yes |
Я упомянул в разделе конфигурации сервера, что каждый компьютер и
пользователь имеет ключ. Ключ пользователя сохранен в его файле
~/.ssh/indentity
. Чтобы генерировать ключ,
используйте команду ssh-keygen, но Вы не должны
определять имя файла, в котором сохраняете ключ. По умолчанию
ssh-keygen использует правильное расположение, но
попросит Вас ввести имя файла в случае, если Вы хотите сохранить ключ в
другом месте. Иногда полезно иметь много авторизационных файлов. Как и прежде
ssh-keygen запросит у Вас пароль, что добавляет другой
уровень защиты, и его стоит использовать. Пароль не будет отображен на
экране, когда Вы его напечатаете.
ПРЕДУПРЕЖДЕНИЕ |
Пароль нельзя восстановить, если он забыт. Требования к паролю такие же, как и ко всем прочим паролям. Он должен быть длиной от 10 до 30 символов. Если пароль забыт, придется сгенерировать новый ключ. |
~/.ssh/
с соответствующими правами доступа, а также
их секретный и публичный ключи в .ssh/identity
и
.ssh/identity.pub
, соответственно. Типовой сеанс:
$
|
Теперь ssh готов к работе.
Использование ssh
Теперь пакет ssh и связанные с ним команды установлены и готовы к выполнению.
Сначала опробуем удаленный вход в систему. Можно использовать программу slogin точно так же, как использовалась программа rlogin в примере в первой главе. Первый раз, когда Вы делаете попытку подключения к компьютеру, ssh получит публичный ключ хоста и запросит подтверждение с помощью электронной подписи fingerprint.
Администратор удаленного компьютера должен предоставить электронную
подпись, которую Вы должны добавить к Вашему файлу
.ssh/known_hosts
. Если он этого не сделал, Вы
можете соединиться с удаленным компьютером, но ssh
предупредит Вас о возникшей ситуации. Допустим, что Вы уверены в том, что
работаете с тем компьютером, с которым хотели связаться (никто не перехватил
DNS). Тогда ответьте на запрос положительно. Соответствующий ключ будет
автоматически сохранен в Вашем файле
.ssh/known_hosts
без повторных запросов. Если при
следующей попытке подключения, публичный ключ с этого компьютера не
соответствует тому, который сохранен, Вы будете предупреждены, потому что это
представляет потенциальную опасность.
$ |
На запрос о пароле нужно указать свой пароль на удаленной системе. Этот пароль не будет отображен на экране, когда Вы напечатаете его.
Без специальных параметров slogin будет пытаться
войти с тем же идентификатором пользователя, который был применен на
локальной машине. Вы можете отменить это, указанием параметра
-l
с именем для регистрации на удаленном компьютере.
/tmp/fred
в каталог
/home/maggie/
на удаленный компьютер
chianti.vbrew.com:
$
|
Конечно, будет запрошен пароль. Команда scp по умолчанию отображает полезные сообщения о ходе процесса копирования. Вы можете копировать файл и с удаленного компьютера: просто определите имя хоста и путь к файлу как источник и локальный путь как адресат. Можно даже копировать файлы с удаленного компьютера на другой удаленный компьютер, но это не очень удобно, поскольку все данные пойдут транзитом через Ваш компьютер.
maggie
просматривает оглавление корневого
каталога на машине vchianti.vbrew.com. Команда:
$
|
$
|
Здесь выполняемая команда взята в кавычки, чтобы она вся была воспринята
как параметр ssh, а не обрабатывалась локальной
оболочкой. Эта команда выполняет tar на удаленном
компьютере, чтобы архивировать каталог /etc
, и
пишет результат на стандартный вывод. Мы имеем перенаправление на команду
tar на локальном компьютере в режиме извлечения,
причем чтение архива идет из стандартного ввода.
.ssh/authorized_keys
, здесь-то он и нужен. Файл
.ssh/authorized_keys
хранит публичные
(public) ключи любых удаленных записей пользователя,
к которым нужен автоматический вход. Можно устанавливать автоматические входы
в систему, копируя содержание .ssh/identity.pub
из
удаленной (remote) системы в локальный файл
.ssh/authorized_keys
. Установите права доступа к
файлу .ssh/authorized_keys
так, чтобы только Вы
могли его читать и писать. Это делается командой:
$
|
Публичный ключ представляет собой длинную одиночную строку текста. Если Вы
используете копирование и вставку, чтобы копировать ключ в локальный файл,
убедитесь, что удалили символы конца строки. Файл
.ssh/authorized_keys
может содержать много таких
ключей по одному на строке.
Набор инструментальных средств ssh очень мощен и имеет многие другие полезные свойства и параметры. Для дальнейшего его изучения обратитесь к man-страницам и другой документации, которая поставляется вместе с пакетом.
Назад | Глобальное оглавление | Вперед |
Процедура удаленного вызова (Remote Procedure Call) | Локальное оглавление | Сетевая информационная система (NIS) |