1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/wizardforcel-llthw-zh

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
Клонировать/Скачать
ex27.md 18 КБ
Копировать Редактировать Web IDE Исходные данные Просмотреть построчно История
gitlife-traslator Отправлено 25.11.2024 03:02 8398775

Упражнение 27: Безопасный Shell, SSH, SSHD, SCP

SSH — это сетевой протокол, который позволяет вам подключаться к vm1 через сеть. Давайте рассмотрим его подробнее.

Безопасный Shell (SSH) — это сетевой протокол для безопасного обмена данными, удалённого обслуживания Shell или выполнения команд, а также других сетевых сервисов между двумя подключёнными к сети компьютерами через защищённый канал: сервер и клиент (работающие с SSH-сервером и SSH-клиентом соответственно). Протокол имеет две основные версии, известные как SSH-1 и SSH-2.

Наиболее известное применение протокола — доступ к учётной записи shell на компьютере с операционной системой класса Unix. Он был разработан для замены Telnet и других небезопасных протоколов удалённого доступа, таких как Berkeley rsh и rexec, которые отправляют информацию в открытом виде, особенно пароли, что делает их уязвимыми для анализа пакетов и перехвата данных. SSH использует шифрование для обеспечения конфиденциальности и целостности данных при передаче по незащищённой сети, такой как Интернет.

Важные программы, концепции и конфигурационные файлы SSH:

  • OpenSSH — свободная реализация программы SSH.
  • ssh — программа-клиент, которая позволяет подключаться к SSH-серверу. Putty — пример такой клиентской программы.
  • sshd — серверная программа, позволяющая использовать ssh для подключения к ней.
  • /etc/ssh/ssh_config — файл конфигурации программы-клиента по умолчанию.
  • /etc/ssh/sshd_config — файл конфигурации серверной программы по умолчанию.
  • Система открытого ключа — система шифрования, требующая двух отдельных ключей: один закрытый ключ и один открытый ключ. Хотя ключи разные, они математически связаны друг с другом. Как только данные зашифрованы одним ключом, другой ключ может расшифровать их. Ни один из ключей не может выполнять обе функции. Один ключ является открытым, а другой — закрытым.
  • SSH-ключи — SSH использует систему открытого ключа для аутентификации удалённых компьютеров и позволяет им аутентифицировать пользователей (при необходимости). Любой человек может создать пару соответствующих ключей (открытый и закрытый). Открытый ключ размещается на всех компьютерах, позволяя владельцам закрытого ключа (которые сохраняют его в секрете) получить доступ. Хотя аутентификация основана на закрытом ключе, сам ключ не передаётся по сети во время аутентификации.
  • /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. Для этого мы начнём изучать вывод соединения 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 )

Вы можете оставить комментарий после Вход в систему

1
https://api.gitlife.ru/oschina-mirror/wizardforcel-llthw-zh.git
git@api.gitlife.ru:oschina-mirror/wizardforcel-llthw-zh.git
oschina-mirror
wizardforcel-llthw-zh
wizardforcel-llthw-zh
master