Различия между версиями 3 и 4
Версия 3 от 2022-09-25 22:18:34
Размер: 11429
Редактор: FrBrGeorge
Комментарий:
Версия 4 от 2022-09-25 22:18:51
Размер: 11428
Редактор: FrBrGeorge
Комментарий:
Удаления помечены так. Добавления помечены так.
Строка 15: Строка 15:
 * Терминал, как управляющее устройство '''TODO''' перенести из лекции 2, оформить как отдельный подраздел  * Терминал как управляющее устройство '''TODO''' перенести из лекции 2, оформить как отдельный подраздел

Командная строка и использование SSH

Предполагаемая тематика лекций

На примере прошлого года

Терминал, командная строка и программное окружение Linux

<!> Это очень краткий обзор того, что нужно более или менее знать для участия в С/К

  • История и принципы интерфейса командной строки
    • Текстовый диалог
    • Совмещение управления и данных
  • Возможности командной оболочки
    • Интерпретатор командной строки
    • Редактор командной строки, история, достраивание, подсветка
    • ЯП ВУ
  • Терминал как управляющее устройство TODO перенести из лекции 2, оформить как отдельный подраздел

    • История: аппаратное устройство последовательного приёма и передачи байтов
    • Эмулятор терминала
    • Управляющие символы (^C, ^D и т. п.)

    • ESC-последовательности (<ESC>[36m;, <ESC>[m, <ESC>[5;20H_QQQ и т. п.)

  • Где и зачем искать эмулятор терминала
  • Сборочный инструментарий Linux-окружения, общее понятие: почему не всегда есть, как добиться, чтобы был, особенности дистрибутивов и т. п.

Работа с Secure Shell

  • Терминальнй доступ, проблема защиты учётных данных
  • SSH: вход по логину/паролю
  • Асимметричное шифрование: закрытый и открытый ключ
    • Что можно и что нельзя делать с открытым и закрытым ключами
    • Отпечатки (простой и VisualHostkey)

    • Проблема первоначального обмена ключами:
      1. Чтобы подключиться к удалённому компьютеру по SSH, необходимо зашифровать данные его (компьютера) открытым ключом, т. н. HostKey, а он (и только он!) их расшифрует. Однако HostKey у нас ещё нет

      2. 100% надёжный канал для передачи HostKey

        • Посылаем запрос на HostKey

        • Получаем HostKey и верим ему

        • Шифруем данные с помощью HostKey

        • Удалённый компьютер дешифрует данные с помощью HostKeyPrivate

      3. Отпечаток ключа FingerPrint опубликован в надёжном месте (например, администратор прислал фото)

        • Посылаем запрос на HostKey

        • Получаем HostKey (?)

        • Вычисляем отпечаток, сравниваем его с опубликованным FingerPrint (хоть вручную)

        • Шифруем данные с помощью HostKey

        • Удалённый компьютер дешифрует данные с помощью HostKeyPrivate

      4. Канал скомпрометирован, но мы ему верим
        • Посылаем запрос на HostKey

        • Атакующий перехватывает запрос
        • Атакующий посылает запрос на HostKey

        • Атакующий получает HostKey

        • Атакующий в ответ на наш запрос возвращает нам HostKeyFAKE

        • Получаем HostKeyFAKE и верим ему

        • Шифруем данные с помощью HostKeyFAKE

        • Атакующий перехватывает данные, дешифрует их с помощью HostKeyFAKEPrivate (возможно, даже подменяет)

        • Атакующий шифрует данные с помощью HostKey

        • Удалённый компьютер дешифрует данные с помощью HostKeyPrivate

  • SSH: изготовление персонального ключа и вход по ключу
  • SSH: запароленный ключ и агент для его хранения

Подготовка и использование SSH-ключей

  • Создание пары:
       1 user@linuxprac$ ssh-keygen
       2 Generating public/private rsa key pair.
       3 Enter file in which to save the key (/home/user/.ssh/id_rsa):
       4 Enter passphrase (empty for no passphrase):
       5 Enter same passphrase again:
       6 Your identification has been saved in /home/user/.ssh/id_rsa
       7 Your public key has been saved in /home/user/.ssh/id_rsa.pub
       8 The key fingerprint is:
       9 SHA256:UAOdsJDbNSaGT2lJ0uC/ZeUeISrKVxECRPYksOmNFiY george@linuxprac.box.office.basealt.ru
      10 The key's randomart image is:
      11 +---[RSA 3072]----+
      12 |.+*.**=*o.       |
      13 | + =o+O+*.       |
      14 |Eo  oB++..o      |
      15 |+ + ..o+ + .     |
      16 | + .. + S o      |
      17 |.. . o + . .     |
      18 |  o . .   .      |
      19 |   .             |
      20 |                 |
      21 +----[SHA256]-----+
      22 
    
  • Запуск агента
    • Короткий вариант:
         1 user@linuxprac$ eval `ssh-agent`
         2 Agent pid 3823
         3 
      
    • Это равносильно запуску ssh-agent и копипасте всего его вывода в командную строку

         1 user@linuxprac$ ssh-agent
         2 SSH_AUTH_SOCK=/tmp/.private/user/ssh-XXXXXXB7s3Hb/agent.3822; export SSH_AUTH_SOCK;
         3 SSH_AGENT_PID=3823; export SSH_AGENT_PID;
         4 echo Agent pid 3823;
         5 user@linuxprac$ SSH_AUTH_SOCK=/tmp/.private/user/ssh-XXXXXXB7s3Hb/agent.3822; export SSH_AUTH_SOCK;
         6 user@linuxprac$ SSH_AGENT_PID=3823; export SSH_AGENT_PID;
         7 user@linuxprac$ echo Agent pid 3823
         8 Agent pid 3823
         9 
      
  • Добавление ключа (-l показывает отпечаток, а -L — весь открытый ключ)

       1 user@linuxprac$ ssh-add -l
       2 The agent has no identities.
       3 user@linuxprac$ ssh-add
       4 Enter passphrase for /home/user/.ssh/id_rsa:
       5 Identity added: /home/user/.ssh/id_rsa (george@linuxprac.box.office.basealt.ru)
       6 user@linuxprac$ ssh-add -l
       7 3072 SHA256:UAOdsJDbNSaGT2lJ0uC/ZeUeISrKVxECRPYksOmNFiY george@linuxprac.box.office.basealt.ru (RSA)
       8 user@linuxprac$ ssh-add -L
       9 ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQC5ZpCaF+DvI/Gw4rqc+UHf4g7STSuyS1IUr9doseJWBVNra5fPTZsRTNFGQV+aoVJF4iLOzQSypiWFpKG2bjG9n05VkSGfME62lE9U8x0UPrmtbNfUWE56e4QxmKqq6ielB2zn94brQ8+vWe1Fx2NyPr0XiX0uyp48scVo1G8tkdRQWeIQf8y2q6RFLWBG0kJnuSd5AabmyUbo/lWMG40+TQGwr2+A5YXUTWgovsFVtIoqo7tpv4ZXrcKA/BVAFUbJwZS4F+sY0W2AtcVjB5RZotjtmVoClVacxpJagK0FUpmLz/MopAELsbDPG4E4CvqsurPrlSxqeIW25rLfXHWfCl7cUhsRcWl7TiDNE/T1t0nQiK1iC/SaSI2wld28uRIfF+kEbbLICozFC1aXehpzwoRNQafTKwixkkI+LioEio1WxS6KPDiT+mcH93IGtH4U6QnEDbOMIZ4xXzdaM54chYgcOl387eU9Rv14c9b68GzZVSBBbFYpykQ6bCJ43FU= george@linuxprac.box.office.basealt.ru
      10 
    
  • Копирование ключа на удалённый хост в качестве разрешённого для аутентификации
       1 user@linuxprac$ ssh user@remote.host.ip
       2 user@remote.host.ip's password:
       3 
       4 user@linuxprac$ ssh-copy-id user@remote.host.ip
       5 /usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed
       6 /usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys
       7 user@remote.host.ip's password:
       8 
       9 Number of key(s) added: 1
      10 
      11 Now try logging into the machine, with:   "ssh 'remote.host.ip'"
      12 and check to make sure that only the key(s) you wanted were added.
      13 
    
  • «Беспарольный» логин (пароль, точнее, passphrase от ключа, уже один раз введён при добавлении ключа в агент)
       1 user@linuxprac$ ssh remote.host.ip
       2 Last login: Fri Sep 10 17:35:50 2021 from 193.43.10.248
       3 user@remote$ tail -1 .ssh/authorized_keys
       4 ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQC5ZpCaF+DvI/Gw4rqc+UHf4g7STSuyS1IUr9doseJWBVNra5fPTZsRTNFGQV+aoVJF4iLOzQSypiWFpKG2bjG9n05VkSGfME62lE9U8x0UPrmtbNfUWE56e4QxmKqq6ielB2zn94brQ8+vWe1Fx2NyPr0XiX0uyp48scVo1G8tkdRQWeIQf8y2q6RFLWBG0kJnuSd5AabmyUbo/lWMG40+TQGwr2+A5YXUTWgovsFVtIoqo7tpv4ZXrcKA/BVAFUbJwZS4F+sY0W2AtcVjB5RZotjtmVoClVacxpJagK0FUpmLz/MopAELsbDPG4E4CvqsurPrlSxqeIW25rLfXHWfCl7cUhsRcWl7TiDNE/T1t0nQiK1iC/SaSI2wld28uRIfF+kEbbLICozFC1aXehpzwoRNQafTKwixkkI+LioEio1WxS6KPDiT+mcH93IGtH4U6QnEDbOMIZ4xXzdaM54chYgcOl387eU9Rv14c9b68GzZVSBBbFYpykQ6bCJ43FU= user@linuxprac.box.office.basealt.ru
       5 
    
    • Скрипт ssh-copy-id просто логинится на удалённый хост и дописывает ключ в конец файла .ssh/authorized_keys

Д/З

  1. Обеспечить доступ к Linux-системе, которую можно устанавливать произвольное ПО из репозитория. Если таковой нет, обратиться к FrBrGeorge

  2. Завести публичный git-репозиторий

    • В случае GitHub вам понадобится сгенерировать и зарегистрировать ssh-ключ

Где делать Д/З

LecturesCMC/LinuxApplicationDevelopment2022/00_SshCmdline (последним исправлял пользователь FrBrGeorge 2022-09-25 22:18:51)