Упражнение 27: Безопасный Shell, SSH, SSHD, SCP
SSH — это сетевой протокол, который позволяет вам подключаться к vm1 через сеть. Давайте рассмотрим его подробнее.
Безопасный Shell (SSH) — это сетевой протокол для безопасного обмена данными, удалённого обслуживания Shell или выполнения команд, а также других сетевых сервисов между двумя подключёнными к сети компьютерами через защищённый канал: сервер и клиент (работающие с SSH-сервером и SSH-клиентом соответственно). Протокол имеет две основные версии, известные как SSH-1 и SSH-2.
Наиболее известное применение протокола — доступ к учётной записи shell на компьютере с операционной системой класса Unix. Он был разработан для замены Telnet и других небезопасных протоколов удалённого доступа, таких как Berkeley rsh и rexec, которые отправляют информацию в открытом виде, особенно пароли, что делает их уязвимыми для анализа пакетов и перехвата данных. SSH использует шифрование для обеспечения конфиденциальности и целостности данных при передаче по незащищённой сети, такой как Интернет.
Важные программы, концепции и конфигурационные файлы SSH:
ssh
— программа-клиент, которая позволяет подключаться к SSH-серверу. Putty — пример такой клиентской программы.sshd
— серверная программа, позволяющая использовать ssh
для подключения к ней./etc/ssh/ssh_config
— файл конфигурации программы-клиента по умолчанию./etc/ssh/sshd_config
— файл конфигурации серверной программы по умолчанию./etc/ssh/moduli
— простые числа и их генераторы, используемые sshd(8)
для метода обмена ключами Diffie-Hellman Group Exchange./etc/ssh/ssh_host_dsa_key
, /etc/ssh/ssh_host_rsa_key
— закрытые ключи хоста RSA и DSA./etc/ssh/ssh_host_dsa_key.pub
, /etc/ssh/ssh_host_rsa_key.pub
— открытые ключи хоста RSA и DSA.Протокол SSH важен и широко используется, он обладает множеством функций, поэтому необходимо понимать, как он работает. Вот некоторые из его применений:
scp
— передача файлов через SSH.sftp
— протокол, похожий на ftp, для управления удалёнными файлами.sshfs
— файловая система на основе SSH.Чтобы понять этот протокол, давайте посмотрим, что происходит во время сеанса SSH. Для этого мы начнём изучать вывод соединения SSH с vm1 с комментариями (да, это возможно и эффективно). Обзор:
Вы
вводите SSH VM1
управление теперь передано программе SSH-клиенту
Программа SSH-клиент
входит в этап открытого текста
читает конфигурацию
согласовывает протокол с SSH-сервером
входит в этап передачи SSH
согласует с SSH-сервером
алгоритм шифрования данных
алгоритм целостности данных
алгоритм сжатия данных
использует алгоритм Диффи-Хеллмана для запуска обмена ключами
полученный общий ключ используется для установления безопасного соединения
входит в этап SSH-userauth
требует от вас ввести пароль
управление теперь передано вам
Вы
вводите пароль
управление теперь передано программе SSH-клиенту
Программа SSH-клиент
аутентифицирует вас на SSH-сервере
входит в этап соединения SSH
предоставляет вам псевдотерминал
запускает для вас оболочку
управление теперь передано вам
Вы
выполняете некоторые (или никакие) полезные действия на vm1
закрываете оболочку
управление полностью передано программе SSH-клиенту
Программа SSH-клиент
закрывает псевдотерминал
закрывает соединение
Теперь прочитайте это:
и изучите реальный вывод сеанса SSH:
user1@vm1:~$ ssh -vv vm1
Protocol version selection, plaintext
-------------------------------------
OpenSSH_5.5p1 Debian-6+squeeze2, OpenSSL 0.9.8o 01 Jun 2010
# Speaks for itself, I will mark such entries with -- below
debug1: Reading configuration data /etc/ssh/ssh_config
# Applying default options for all hosts. Additional options for each host may be
# specified in the configuration file
debug1: Applying options for *
debug2: ssh_connect: needpriv 0
debug1: Connecting to vm1 [127.0.1.1] port 22.
debug1: Connection established.
debug1: identity file /home/user1/.ssh/id_rsa type -1 # no such files
debug1: identity file /home/user1/.ssh/id_rsa-cert type -1
debug1: identity file /home/user1/.ssh/id_dsa type -1
debug1: identity file /home/user1/.ssh/id_dsa-cert type -1
debug1: Remote protocol version 2.0, remote software version OpenSSH_5.5p1 Debian-6+squeeze2
debug1: match: OpenSSH_5.5p1 Debian-6+squeeze2 pat OpenSSH*
debug1: Enabling compatibility mode for protocol 2.0
debug1: Local version string SSH-2.0-OpenSSH_5.5p1 Debian-6+squeeze2
debug2: fd 3 setting O_NONBLOCK
SSH-transport, binary packet protocol
-------------------------------------
debug1: SSH2_MSG_KEXINIT sent
debug1: SSH2_MSG_KEXINIT received
# Key exchange algorithms
debug2: kex_parse_kexinit: diffie-hellman-group-exchange-sha256,diffie-hellman-group-exchange-sha1,diffie-hellman-group14-sha1,diffie-hellman-group1-sha1
# SSH host key types
debug2: kex_parse_kexinit: ssh-rsa-cert-v00@openssh.com,ssh-dss-cert-v00@openssh.com,ssh-rsa,ssh-dss
# Data encryption
``` **Шифры**
debug2: kex_parse_kexinit: aes128-ctr,aes192-ctr,aes256-ctr,arcfour256,arcfour128,aes128-cbc,3des-cbc,blowfish-cbc,cast128-cbc,aes192-cbc,aes256-cbc,arcfour,rijndael-cbc@lysator.liu.se
debug2: kex_parse_kexinit: aes128-ctr,aes192-ctr,aes256-ctr,arcfour256,arcfour128,aes128-cbc,3des-cbc,blowfish-cbc,cast128-cbc,aes192-cbc,aes256-cbc,arcfour,rijndael-cbc@lysator.liu.se
**Алгоритмы обеспечения целостности данных**
debug2: kex_parse_kexinit: hmac-md5,hmac-sha1,umac-64@openssh.com,hmac-ripemd160,hmac-ripemd160@openssh.com,hmac-sha1-96,hmac-md5-96
debug2: kex_parse_kexinit: hmac-md5,hmac-sha1,umac-64@openssh.com,hmac-ripemd160,hmac-ripemd160@opensssh.com,hmac-sha1-96,hmac-md5-96
**Алгоритмы сжатия данных**
debug2: kex_parse_kexinit: none,zlib@openssh.com,zlib
debug2: kex_parse_kexinit: none,zlib@openssh.com,zlib
**Сообщения от сервера**
debug2: kex_parse_kexinit: diffie-hellman-group-exchange-sha256,diffie-hellman-group-exchange-sha1,diffie-hellman-group14-sha1,diffie-hellman-group1-sha1
debug2: kex_parse_kexinit: ssh-rsa,ssh-dss
debug2: kex_parse_kexinit: aes128-ctr,aes192-ctr,aes256-ctr,arcfour256,arcfour128,aes128-cbc,3des-cbc,blowfish-cbc,cast128-cbc,aes192-cbc,aes256-cbc,arcfour,rijndael-cbc@lysator.liu.se
debug2: kex_parse_kexinit: aes128-ctr,aes192-ctr,aes256-ctr,arcfour256,arcfour128,aes128-cbc,3des-cbc,blowfish-cbc,cast128-cbc,aes192-cbc,aes256-cbc,arcfour,rijndael-cbc@lysator.liu.se
debug2: kex_parse_kexinit: hmac-md5,hmac-sha1,umac-64@openssh.com,hmac-ripemd160,hmac-ripemd160@openssh.com,hmac-sha1-96,hmac-md5-96
debug2: kex_parse_kexinit: hmac-md5,hmac-sha1,umac-64@openssh.com,hmac-ripemd160,hmac-ripemd160@openssh.com,hmac-sha1-96,hmac-md5-96
debug2: kex_parse_kexinit: none,zlib@openssh.com
debug2: kex_parse_kexinit: none,zlib@openssh.com
**Настройка кода аутентификации сообщения**
debug2: mac_setup: found hmac-md5
debug1: kex: server->client aes128-ctr hmac-md5 none
debug2: mac_setup: found hmac-md5
debug1: kex: client->server aes128-ctr hmac-md5 none
**Обмен ключами**
debug1: SSH2_MSG_KEX_DH_GEX_REQUEST(1024<1024<8192) sent
debug1: SSH2_MSG_KEX_DH_GEX_REQUEST(1024<1024<8192) sent
debug1: expecting SSH2_MSG_KEX_DH_GEX_GROUP
debug2: dh_gen_key: priv key bits set: 135/256
debug2: bits set: 498/1024
debug1: SSH2_MSG_KEX_DH_GEX_INIT sent
debug1: expecting SSH2_MSG_KEX_DH_GEX_REPLY
**Аутентификация сервера**
The authenticity of host 'vm1' (127.0.1.1) can't be established. RSA key fingerprint is b6:06:92:5e:04:49:d9:e8:57:90:61:1b:16:87:bb:09. Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added 'vm1' (RSA) to the list of known hosts.
# Ключ добавлен в /home/user1/.ssh/known_hosts и проверен
debug2: bits set: 499/1024
debug1: ssh_rsa_verify: signature correct
**На основе общего главного ключа происходит получение ключей шифрования и целостности данных**
debug2: kex_derive_keys
debug2: set_newkeys: mode 1
# Информация об этом отправляется на сервер
debug1: SSH2_MSG_NEWKEYS sent
debug1: expecting SSH2_MSG_NEWKEYS
debug2: set_newkeys: mode 0
debug1: SSH2_MSG_NEWKEYS received
# Не уверен насчёт IP роуминга
debug1: Роуминг не разрешён сервером
**SSH-userauth**
debug1: SSH2_MSG_SERVICE_REQUEST sent
debug2: service_accept: ssh-userauth
debug1: SSH2_MSG_SERVICE_ACCEPT received
debug2: key: /home/user1/.ssh/id_rsa ((nil))
debug2: key: /home/user1/.ssh/id_dsa ((nil))
debug1: Аутентификации, которые могут быть продолжены: publickey,password
debug1: Следующий метод аутентификации: publickey
debug1: Пытаемся использовать закрытый ключ: /home/user1/.ssh/id_rsa
debug1: Пытаемся использовать закрытый ключ: /home/user1/.ssh/id_dsa
debug2: Мы не отправляли пакет, отключаем метод
debug1: Следующая аутентификация **Теперь вы узнаете, как запустить sshd в режиме отладки, создать аутентификацию с открытым ключом и скопировать файлы с помощью scp.**
**Шаги:**
1. mkdir -v ssh_test
2. cd ssh_test
3. cp -v /etc/ssh/sshd_config .
4. sed -i'.bak' 's/^Port 22$/Port 1024/' sshd_config
5. sed -i 's/^HostKey \/etc\/ssh\/ssh_host_rsa_key$/Hostkey \/home\/user1\/ssh_test\/ssh_host_rsa_key/' sshd_config
6. sed -i 's/^HostKey \/etc\/ssh\/ssh_host_dsa_key$/Hostkey \/home\/user1\/ssh_test\/ssh_host_dsa_key/' sshd_config
7. diff sshd_config.bak sshd_config
8. ssh-keygen -b 4096 -t rsa -N '' -v -h -f ssh_host_rsa_key
9. ssh-keygen -b 1024 -t dsa -N '' -v -h -f ssh_host_dsa_key
10. ssh-keygen -b 4096 -t rsa -N '' -v -f ~/.ssh/id_rsa
11. cat ~/.ssh/id_rsa.pub > ~/.ssh/authorized_keys
12. /usr/sbin/sshd -Ddf sshd_config > sshd.out 2>&1 &
13. ssh-keyscan -H vm1 127.0.0.1 >> ~/.ssh/known_hosts
14. /usr/sbin/sshd -Ddf sshd_config >> sshd.out 2>&1 &
15. ssh vm1 -v -p 1024 2>ssh.out
16. ps au --forest
17. logout
18. /usr/sbin/sshd -Ddf sshd_config >> sshd.out 2>&1 &
19. scp -v -P 1024 vm1:.bashrc . 2>scp.out
*В результате выполнения этих шагов вы сможете настроить аутентификацию по открытому ключу и скопировать файл с удалённого сервера.*
*Обратите внимание, что это только перевод текста без учёта контекста и возможных ошибок.* **Объяснение**
1. Создаётся каталог `/home/user1/ssh_test`.
2. Он становится текущим рабочим каталогом.
3. Файл `sshd_config` копируется в этот каталог.
4. Номер порта, который слушает `sshd`, изменяется с 22 на 1024, а копия переименовывается в `sshd_config.bak`.
5. Заменяется местоположение RSA-ключа хоста.
6. Заменяется расположение DSA-ключа хоста.
7. Показывается разница между старой и новой версиями `sshd_config`.
8. Создаётся новая пара 4096-битных RSA-ключей хоста с пустым паролем, которая сохраняется в файлах `/home/user1/ssh_test/ssh_host_rsa_key` и `/home/home/user1/ssh_test/ssh_host_rsa_key.pub`.
9. То же самое делается для DSA-ключей.
10. Создаются новые пары ключей аутентификации, которые сохраняются в файлах `/home/user1/.ssh/id_rsa` и `/home/user1/.ssh/id_rsa.pub`.
11. Копия `id_rsa.pub` помещается в файл `/home/user1/.ssh/authorized_keys`, чтобы разрешить аутентификацию без пароля.
12. Новый SSH-сервер запускается на порту 1024 в режиме отладки, и весь вывод сохраняется в файле `sshd.log`.
13. Извлекается ключ аутентификации клиента SSH и добавляется в файл `/home/user1/.ssh/known_hosts`.
14. Новый SSH-сервер снова запускается на порту 1024 в режиме отладки и добавляет весь вывод к файлу `sshd.out`. Это происходит потому, что в режиме отладки SSH-сервер поддерживает только одно соединение.
15. Клиент `ssh` используется для подключения к серверу.
16. Текущие процессы отображаются в виде дерева. Можно увидеть, что вы используете bash, запущенный через `sshd` для вашего соединения, а `sshd` был запущен вами несколькими строками ранее.
17. Сеанс `ssh` завершается.
18. SSH-сервер перезапускается.
19. Файл `.bashrc` копируется из домашнего каталога в текущий каталог.
**Дополнительные задания**
Посмотрите видео, объясняющее, как работает шифрование: <http://www.youtube.com/watch?v=3QnD2c4Xovk>.
Прочитайте: <http://docstore.mik.ua/orelly/networking_2ndEd/ssh/ch03_04.htm>.
Проанализируйте выходные данные отладки в файлах `ssh.out`, `scp.out` и `sshd.out` самостоятельно.
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Опубликовать ( 0 )