Наши партнеры

UnixForum





Библиотека сайта rus-linux.net

Администрирование систем Linux. Клиент и сервер ssh

Оригинал: SSH client and server
Автор: Paul Cobbaut
Дата публикации: 12 марта 2015 г.
Перевод: A. Панин
Дата перевода: 1 апреля 2015 г.

Глава 25. Клиент и сервер ssh

Безопасная командная оболочка (secure shell, ssh) является набором инструментов, использующих защищенный протокол для взаимодействия с удаленными системами Linux.

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

25.1. О протоколе ssh

25.1.1. Безопасная командная оболочка

Избегайте использования утилит telnet, rlogin и rsh для удаленного подключения к вашим серверам. Эти инструменты используют устаревшие протоколы, не предусматривающие шифрования данных сессии входа в систему, следовательно, ваши имя пользователя и пароль могут быть перехвачены с помощью таких инструментов, как wireshark или tcpdump. Для безопасного подключения к вашим серверам следует использовать протокол ssh.

Протокол ssh предусматривает два уровня защиты. Во-первых ваше соединение шифруется, а во-вторых, перед установкой соединения осуществляется двухсторонняя аутентификация.

Соединение по протоколу ssh всегда начинается с криптографического рукопожатия, после которого начинается передача зашифрованного с помощью симметричного алгоритма на транспортном уровне трафика. Другими словами, шифрование данных в туннеле начинается до того момента, когда вы начнете что-либо писать.

После установки защищенного соединения осуществляется аутентификация пользователя (с использованием имени/пароля пользователя или публичного/закрытого ключей) и начинается передача данных по защищенному соединению.

Протокол ssh предусматривает возможность сохранения данных о серверах, с которыми осуществлялось взаимодействие (поэтому при каких-либо подозрениях о ненадежности устанавливаемого соединения вы будете немедленно уведомлены).

Пакет openssh сопровождается разработчиками проекта OpenBSD и распространяется в составе множества операционных систем (вполне возможно, что это самый популярный пакет в мире).

25.1.2. Директория для файлов конфигурации /etc/ssh/

Файлы конфигурации клиента и сервера ssh находятся в директории /etc/ssh. В следующих разделах мы обсудим большинство файлов конфигурации из данной директории.

25.1.3. Версии протокола ssh

Существуют две версии протокола ssh (а именно, версии 1 и 2). Избегайте использовании версии 1 везде, где это возможно, так как данная версия содержит ряд известных уязвимостей. Вы можете управлять версией протокола, используемой клиентом ssh, с помощью файла конфигурации /etc/ssh/ssh_config, а демоном, являющимся сервером openssh - с помощью файла конфигурации /etc/ssh/sshd_config.

paul@ubu1204:/etc/ssh$ grep Protocol ssh_config 
#   Protocol 2,1
paul@ubu1204:/etc/ssh$ grep Protocol sshd_config 
Protocol 2

25.1.4. Публичные и закрытые ключи

Протокол ssh предусматривает использование известной системы публичных и закрытых ключей. Ниже приведено сжатое объяснение принципа использования данных ключей; дополнительная информация может быть найдена в энциклопедии Wikipedia.

http://en.wikipedia.org/wiki/Public-key_cryptography

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

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

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

25.1.5. Алгоритмы rsa и dsa

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

http://en.wikipedia.org/wiki/RSA_(algorithm)
http://en.wikipedia.org/wiki/Digital_Signature_Algorithm

25.2. Вход в удаленную систему

В следующем примере показана методика использования клиента ssh для входа в удаленную систему Linux. Локальный пользователь с именем paul осуществляет вход в удаленную систему под именем admin42.

paul@ubu1204:~$ ssh admin42@192.168.1.30
The authenticity of host '192.168.1.30 (192.168.1.30)' can't be established.
RSA key fingerprint is b5:fb:3c:53:50:b4:ab:81:f3:cd:2e:bb:ba:44:d3:75.
Are you sure you want to continue connecting (yes/no)?

Как вы видите, пользователь paul представлен с помощью соответствующего отпечатка ключа аутентификации rsa (rsa autentification fingerprint) на стороне удаленной системы. Локальный пользователь может принять его, введя слово yes. Как мы увидим позднее, данный отпечаток ключа аутентификации будет добавлен в файл ~/.ssh/known_hosts.

paul@ubu1204:~$ ssh admin42@192.168.1.30
The authenticity of host '192.168.1.30 (192.168.1.30)' can't be established.
RSA key fingerprint is b5:fb:3c:53:50:b4:ab:81:f3:cd:2e:bb:ba:44:d3:75.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '192.168.1.30' (RSA) to the list of known hosts.
admin42@192.168.1.30's password: 
Welcome to Ubuntu 12.04 LTS (GNU/Linux 3.2.0-26-generic-pae i686)

 * Documentation: https://help.ubuntu.com/

1 package can be updated.
0 updates are security updates.

Last login: Wed Jun  6 19:25:57 2012 from 172.28.0.131
admin42@ubuserver:~$

Пользователь может завершить работу с удаленной системой, выполнив команду exit или использовав сочетание клавиш Ctrl+D.

admin42@ubuserver:~$ exit
logout
Connection to 192.168.1.30 closed.
paul@ubu1204:~$

25.3. Выполнение команд в удаленной системе

В примере ниже показана методика выполнения единственной команды pwd в удаленной системе. В данном случае нет необходимости в явном завершении работы с системой с помощью команды exit.

paul@ubu1204:~$ ssh admin42@192.168.1.30 pwd
admin42@192.168.1.30's password: 
/home/admin42
paul@ubu1204:~$

25.4. Утилита scp

Утилита scp работает аналогично утилите cp, но при этом позволяет использовать протокол ssh при задании путей к исходному и целевому файлам. Ниже приведен пример копирования файла /etc/hosts с удаленного сервера в домашнюю директорию пользователя paul.

paul@ubu1204:~$ scp admin42@192.168.1.30:/etc/hosts /home/paul/serverhosts
admin42@192.168.1.30's password: 
hosts                                            100%  809     0.8KB/s   00:00

А это обратный пример копирования локального файла в директорию на удаленном сервере.

paul@ubu1204:~$ scp ~/serverhosts admin42@192.168.1.30:/etc/hosts.new
admin42@192.168.1.30's password: 
serverhosts                                  100%  809     0.8KB/s   00:00

25.5. Настройка соединений по протоколу ssh без использования паролей

Для настройки соединения по протоколу ssh на основе публичных/закрытых ключей без использования паролей следует в первую очередь воспользоваться утилитой ssh-keygen с целью генерации пары ключей без использования фразы пароля, после чего скопировать ваш сгенерированный публичный ключ на удаленный сервер. Давайте поэтапно выполним описанные действия.

В следующем примере мы будем настраивать соединение по протоколу ssh без использования паролей для Элис и Боба. У Элис есть учетная запись на сервере, работающем под управлением дистрибутива Red Hat Enterprise Linux, а Боб использует дистрибутив Ubuntu на своем ноутбуке. Боб желает предоставить Элис доступ к своей системе по протоколу ssh с использованием публичных и закрытых ключей. Это означает, что даже в том случае, если Боб сменит свой пароль для входа в систему, используемую на ноутбуке, у Элис все так же будет доступ к его системе.

25.5.1. Утилита ssh-keygen

В примере ниже показано, как Элис использовала утилиту ssh-keygen для генерации пары ключей. Элис не вводила ключевую фразу.

[alice@RHEL5 ~]$ ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/home/alice/.ssh/id_rsa): 
Created directory '/home/alice/.ssh'.
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in /home/alice/.ssh/id_rsa.
Your public key has been saved in /home/alice/.ssh/id_rsa.pub.
The key fingerprint is:
9b:ac:ac:56:c2:98:e5:d9:18:c4:2a:51:72:bb:45:eb alice@RHEL5
[alice@RHEL5 ~]$

Вы можете использовать команду ssh-keygen -t dsa аналогичным образом.

25.5.2. Директория ~/.ssh

Помимо того, что утилита ssh-keygen генерирует публичные и закрытые ключи, она также создает скрытую директорию .ssh с необходимыми правами доступа. Вы можете создать директорию .ssh вручную, но в этом случае вам придется выполнить команду chmod 700 для установки необходимых прав доступа к ее содержимому! В противном случае клиент ssh откажется от использования ключей (так как использование общедоступных закрытых ключей не является безопасной практикой!).

Как вы видите, содержимое директории .ssh, находящейся в домашней директории Элис, надежно защищено.

[alice@RHEL5 ~]$ ls -ld .ssh
drwx------ 2 alice alice 4096 май  1 07:38 .ssh
[alice@RHEL5 ~]$

Боб использует дистрибутив Ubuntu дома. Он решил самостоятельно создать директорию .ssh, поэтому ему придется позаботиться и о ее безопасности.

bob@laika:~$ mkdir .ssh
bob@laika:~$ ls -ld .ssh
drwxr-xr-x 2 bob bob 4096 2008-05-14 16:53 .ssh
bob@laika:~$ chmod 700 .ssh/
bob@laika:~$

25.5.3. Файлы ключей id_rsa и id_rsa.pub

Утилита ssh-keygen генерирует файлы ключей в директории .ssh. Файл публичного ключа носит имя ~/.ssh/id_rsa.pub. Файл закрытого ключа носит имя ~/.ssh/id_rsa.

[alice@RHEL5 ~]$ ls -l .ssh/
итого 16
-rw------- 1 alice alice 1671 май  1 07:38 id_rsa
-rw-r--r-- 1 alice alice  393 май  1 07:38 id_rsa.pub

При использовании алгоритма dsa вместо алгоритма rsa файлы будут носить имена id_dsa и id_dsa.pub.

25.5.4. Распространение публичных ключей по другим системам

Элис решила использовать утилиту scp для копирования файла публичного ключа со своего сервера на ноутбук Боба.

[alice@RHEL5 .ssh]$ scp id_rsa.pub bob@192.168.48.92:~/.ssh/authorized_keys
bob@192.168.48.92's password: 
id_rsa.pub                                   100%  393     0.4KB/s   00:00

Проявляйте осторожность при копировании второго файла публичного ключа! Вы должны не перезаписывать файл первого публичного ключа, а добавить данные из файла нового публичного ключа в файл ~/.ssh/authorized_keys!

cat id_rsa.pub >> ~/.ssh/authorized_keys

Элис также могла бы использовать утилиту ssh-copy-id таким образом, как показано в примере ниже.

ssh-copy-id -i .ssh/id_rsa.pub bob@192.168.48.92

25.5.5. Файл authorized_keys

Вы можете создать файл с именем authorized_keys в директории ~/.ssh вашей системы. Данный файл может содержать один или большее количество публичных ключей от людей, которым вы доверяете. Эти доверенные лица могут использовать свои закрытые ключи для подтверждения своей идентичности и получения доступа к вашей учетной записи по протоколу ssh (без ввода пароля). В примере показано содержимое файла authorized_keys из системы Боба, в котором сохранен публичный ключ Элис.

bob@laika:~$ cat .ssh/authorized_keys 
ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEApCQ9xzyLzJes1sR+hPyqW2vyzt1D4zTLqk\
MDWBR4mMFuUZD/O583I3Lg/Q+JIq0RSksNzaL/BNLDou1jMpBe2Dmf/u22u4KmqlJBfDhe\
yTmGSBzeNYCYRSMq78CT9l9a+y6x/shucwhaILsy8A2XfJ9VCggkVtu7XlWFDL2cum08/0\
mRFwVrfc/uPsAn5XkkTscl4g21mQbnp9wJC40pGSJXXMuFOk8MgCb5ieSnpKFniAKM+tEo\
/vjDGSi3F/bxu691jscrU0VUdIoOSo98HUfEf7jKBRikxGAC7I4HLa+/zX73OIvRFAb2hv\
tUhn6RHrBtUJUjbSGiYeFTLDfcTQ== alice@RHEL5

25.5.6. Соединение по протоколу ssh без использования паролей

Теперь Элис может использовать клиент ssh для соединения с ноутбуком Боба без использования пароля. Принимая во внимание возможность использования протокола ssh для выполнения команд на уделенных системах, можно сделать вывод о том, что приложения из различных систем могут объединяться каналами для выполнения полезной работы.

[alice@RHEL5 ~]$ ssh bob@192.168.48.92 "ls -l .ssh"
итого 4
-rw-r--r-- 1 bob bob 393 2008-05-14 17:03 authorized_keys
[alice@RHEL5 ~]$

25.6. Перенаправление сессии оконной системы X11 по протоколу ssh

Другой популярной возможностью клиента ssh является возможность перенаправления сессии оконной системы X11 (X11 forwarding) по протоколу ssh с помощью команды ssh -X.

Ниже приведен пример перенаправления сессии оконной системы X11 по протоколу ssh: пользователь paul входит со своего компьютера под именем greet в удаленную систему с целью запуска приложения с графическим интерфейсом mozilla-thunderbird. Несмотря на то, что приложение будет исполняться на удаленном компьютере от лица пользователя greet, окно приложения будет показано на мониторе, подключенном к локальному компьютеру пользователя paul.

paul@debian5:~/PDF$ ssh -X greet@greet.dyndns.org -p 55555
Warning: Permanently added the RSA host key for IP address \
'81.240.174.161' to the list of known hosts.
Password: 
Linux raika 2.6.8-2-686 #1 Tue Aug 16 13:22:48 UTC 2005 i686 GNU/Linux

Last login: Thu Jan 18 12:35:56 2007
greet@raika:~$ ps fax | grep thun
greet@raika:~$ mozilla-thunderbird &
[1] 30336

25.7. Отладка соединений по протоколу ssh

Используйте команду ssh -v для получения отладочной информации о попытке соединения по протоколу ssh.

paul@debian5:~$ ssh -v bert@192.168.1.192
OpenSSH_4.3p2 Debian-8ubuntu1, OpenSSL 0.9.8c 05 Sep 2006
debug1: Reading configuration data /home/paul/.ssh/config
debug1: Reading configuration data /etc/ssh/ssh_config
debug1: Applying options for *
debug1: Connecting to 192.168.1.192 [192.168.1.192] port 22.
debug1: Connection established.
debug1: identity file /home/paul/.ssh/identity type -1
debug1: identity file /home/paul/.ssh/id_rsa type 1
debug1: identity file /home/paul/.ssh/id_dsa type -1
debug1: Remote protocol version 1.99, remote software version OpenSSH_3
debug1: match: OpenSSH_3.9p1 pat OpenSSH_3.*
debug1: Enabling compatibility mode for protocol 2.0
...

25.8. Сервер sshd

Исполняемый файл сервера ssh носит имя sshd и содержится в пакете программного обеспечения openssh-server.

root@ubu1204~# dpkg -l openssh-server | tail -1
ii  openssh-server   1:5.9p1-5ubuntu1    secure shell (SSH) server,... 

25.9. Ключи сервера sshd

Файлы публичных ключей, используемые сервером sshd, располагаются в директории /etc/ssh и могут читаться всеми пользователями. Файлы закрытых ключей могут читаться исключительно пользователем root.

root@ubu1204~# ls -l /etc/ssh/ssh_host_*
-rw------- 1 root root  668 июн 7 2011 /etc/ssh/ssh_host_dsa_key
-rw-r--r-- 1 root root  598 июн 7 2011 /etc/ssh/ssh_host_dsa_key.pub
-rw------- 1 root root 1679 июн 7 2011 /etc/ssh/ssh_host_rsa_key
-rw-r--r-- 1 root root  390 июн 7 2011 /etc/ssh/ssh_host_rsa_key.pub

25.10. Демон ssh-agent

При генерации ключей с помощью утилиты ssh-keygen у вас имеется возможность ввести ключевую фразу для ограничения доступа к этим ключам. Для того, чтобы не вводить ключевую фразу каждый раз при использовании файлов закрытых ключей, вы можете добавить закрытый ключ в базу данных демона ssh-agent с помощью утилиты ssh-add.

В большинстве дистрибутивов Linux демон ssh-agent запускается автоматически после входа пользователя в систему.

root@ubu1204~# ps -ef | grep ssh-agent
paul     2405  2365  0 08:13 ?        00:00:00 /usr/bin/ssh-agent...

В данном примере показана методика использования утилиты ssh-add для вывода списка открытых ключей, которые соответствуют закрытым ключам, добавленным в базу данных демона ssh-agent.

paul@debian5:~$ ssh-add -L
ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAvgI+Vx5UrIsusZPl8da8URHGsxG7yivv3/\
...
wMGqa48Kelwom8TGb4Sgcwpp/VO/ldA5m+BGCw== paul@deb503

25.11. Практическое задание: ssh

0. Убедитесь в том, что у вас есть доступ к двум компьютерам, работающим под управлением Linux, или объединитесь с соседом для выполнения этого практического задания. В этом практическом задании мы будем называть один из используемых компьютеров сервером.

1. Установите сервер sshd на компьютере, выступающем в роли сервера.

2. Проверьте файлы конфигурации на наличие директив, позволяющих использовать исключительно версию 2 протокола ssh.

3. Используйте клиент ssh для входа в используемую на сервере систему, вывода информации о вашей текущей директории и завершения работы с системой.

4. Используйте утилиту scp для копирования файла с вашего компьютера на сервер.

5. Используйте утилиту scp для копирования файла с сервера на ваш компьютер.

6. (Необязательное задание, которое может быть выполнено только в том случае, если у вас установлены дистрибутивы Linux с программными компонентами для реализации графических интерфейсов.) Установите пакет программного обеспечения xeyes на сервере и используйте клиент ssh для запуска утилиты xeyes на сервере с показом окна утилиты на мониторе клиентского компьютера.

7. (Необязательное задание, которое может быть выполнено при тех же условиях, что и предыдущее.) Создайте закладку в запущенном на сервере браузере Firefox, после чего завершите работу браузера на клиентском компьютере и сервере. Используйте команду ssh -X для запуска браузера Firefox на компьютере вашего соседа с показом окна на мониторе вашего компьютера. Видите ли вы закладку, созданную вашим соседом?

8. Используйте утилиту ssh-keygen для создания пары ключей без использования ключевой фразы. Настройте соединение по протоколу ssh без использования паролей между вашим компьютером и компьютером вашего соседа (или между клиентом и сервером).

9. Проверьте корректность прав доступа к файлам ключей сервера sshd; файлы публичных ключей должны читаться любым пользователем, а файлы закрытых ключей - только пользователем root.

10. Проверьте, исполняется ли демон ssh-agent.

11. (Необязательное задание) Защитите доступ к паре ваших файлов ключей с помощью ключевой фразы, после чего добавьте эти ключи в базу данных демона ssh-agent и проверьте работоспособность вашего соединения по протоколу ssh без использования пароля.

25.12. Корректная процедура выполнения практического задания: ssh

0. Убедитесь в том, что у вас есть доступ к двум компьютерам, работающим под управлением Linux, или объединитесь с соседом для выполнения этого практического задания. В этом практическом задании мы будем называть один из используемых компьютеров сервером.

1. Установите сервер sshd на компьютере, выступающем в роли сервера.

apt-get install openssh-server (в дистрибутивах Ubuntu/Debian)
yum -y install openssh-server (в дистрибутивах Centos/Fedora/Red Hat)

2. Проверьте файлы конфигурации на наличие директив, позволяющих использовать исключительно версию 2 протокола ssh.

grep Protocol /etc/ssh/ssh*_config

3. Используйте клиент ssh для входа в используемую на сервере систему, вывода информации о вашей текущей директории и завершения работы с системой.

user@client$ ssh имя_пользователя@ip_адрес_сервера
user@server$ pwd
/home/user
user@server$ exit

4. Используйте утилиту scp для копирования файла с вашего компьютера на сервер.

scp локальный_файл имя_пользователя@ip_адрес_сервера:~

5. Используйте утилиту scp для копирования файла с сервера на ваш компьютер.

scp имя_пользователя@ip_адрес_сервера:~/файл_с_сервера .

6. (Необязательное задание, которое может быть выполнено только в том случае, если у вас установлены дистрибутивы Linux с программными компонентами для реализации графических интерфейсов.) Установите пакет программного обеспечения xeyes на сервере и используйте клиент ssh для запуска утилиты xeyes на сервере с показом окна утилиты на мониторе клиентского компьютера.

На сервере:

apt-get install xeyes

На клиенте:

ssh -X имя_пользователя@ip_адрес_сервера
xeyes

7. (Необязательное задание, которое может быть выполнено при тех же условиях, что и предыдущее) Создайте закладку в запущенном на сервере браузере Firefox, после чего завершите работу браузера на клиентском компьютере и сервере. Используйте команду ssh -X для запуска браузера Firefox на компьютере вашего соседа с показом окна на мониторе вашего компьютера. Видите ли вы закладку, созданную вашим соседом?

8. Используйте утилиту ssh-keygen для создания пары ключей без использования ключевой фразы. Настройте соединение по протоколу ssh без использования паролей между вашим компьютером и компьютером вашего соседа (или между клиентом и сервером).

Решение подробно описано в разделе "Настройка соединений по протоколу ssh без использования паролей" теоретической части главы.

9. Проверьте корректность прав доступа к файлам ключей сервера sshd; файлы публичных ключей должны читаться любым пользователем, а файлы закрытых ключей - только пользователем root.

ls -l /etc/ssh/ssh_host_*

10. Проверьте, исполняется ли демон ssh-agent.

ps fax | grep ssh-agent

11. (Необязательное задание) Защитите доступ к паре ваших файлов ключей с помощью ключевой фразы, после чего добавьте эти ключи в базу данных демона ssh-agent и проверьте работоспособность вашего соединения по протоколу ssh без использования пароля.

Информация может быть найдена на страницах следующих руководств:

man ssh-keygen
man ssh-agent
man ssh-add

Предыдущий раздел: Оглавление Следующий раздел:
Глава 24. Добавление IP-адресов и связывание сетевых интерфейсов   Глава 26. Краткая информация о сетевой файловой системе