мета-данные страницы
Это старая версия документа!
https://habr.com/ru/companies/skillfactory/articles/503466/ Подробнее о протоколе SSH
_ ## ssh-keygen Программа-генератор RSA/DSA ключей #### Синтаксис ```shell ssh-keygen [-q] [-b <bits>] [-t <type>] [-N <new_passphrase>] [-C <comment>] [-f <output_keyfile>] ssh-keygen -p [-P <old_passphrase>] [-N <new_passphrase>] [-f <keyfile>] ``` #### Опции - `-f <~/.ssh/id_srv2>` - указывает имя/путь файла ключа. - `-t <технология шифрования>` - выбор технологии (`rsa1`, `dsa`). - `-b <размер ключа в битах>` - задаем размер ключа. - `-N <_new_passphrase_>` - обеспечивает ввод новой ключевой фразы. - `-P <passphrase>` - обеспечивает ввод (старой) ключевой фразы. - `-p` - запрашивает изменение ключевой фразы приватного ключа вместо создания нового приватного ключа. Предложит указать имя файла содержащего приватный ключ, старую ключевую фразу и, дважды, новую ключевую фразу. - `-C <comment>` - обеспечивает ввод нового комментария. - `-D <reader>` - копировать публичный RSA-ключ на smartcard в устройстве _reader_. _
## sshd sshd - это демон, который ожидает соединения от клиентов. Обычно он запускается при загрузке системы из `/etc/rc`. Он создает нового демона для каждого нового соединения. Ответвленный демон обрабатывает обмен ключами, шифрование, аутентификацию, выполнение команд и обмен данными. Эта реализация sshd поддерживает обе версии протокола SSH, 1 и 2, одновременно.
Синтаксис команды: ```shell sshd [-deiqtDL46] [-b <битов>] [-f <файл_конфигурации>] [-g <время_задержки_регистрации>] [-h <файл_ключа_машины>] [-k <время_генерации_ключа>] [-p <порт>] [-u <величина>] [-V <идентификатор_протокола_клиента>] ```
#### Опции - `-b <биты>` - Определяет число бит в ключе сервера эфемерного протокола версии 1 (по умолчанию 768). - `-d` - Режим отладки. Сервер посылает отладочную информацию в файл регистрации событий системы и не переходит в фоновый режим работы. Также сервер не создает дочерних процессов и обрабатывает только одно соединение. Этот параметр предназначен только для настройки сервера. Несколько параметров -d, указанных один за другим, повышают уровень отладки. Максимум это 3. - `-е` - Если указан этот параметр, sshd направит вывод в консоль вместо механизма регистрации событий системы. - `-f <файл_конфигурации>` - Определяет имя файла конфигурации. По умолчанию это `/etc/openssh/sshd_config`. sshd отказывается работать не имея файла конфигурации. - `-g <время_задержки_регистрации>` - Позволяет клиенту растянуть время в течении которого клиент должен себя аутентифицировать (по умолчанию 600 секунд). Если клиент не смог аутентифицировать себя в течение этого времени, сервер отключается. Значение равное нулю означает неограниченное время ожидания. - `-h <файл_ключа_машины>` - Определяет файл, из которого будет считан ключ машины (по умолчанию это `/etc/openssh/ssh_host_key`). Этот параметр должен быть указан, если sshd запущен не от имени суперпользователя. - `-i` - Определяет, что sshd должен быть запущен из inetd. - `-k <время_генерации_ключа>` - Определяет, как часто будет регенерирован ключ сервера эфемерного протокола версии 1 (по умолчанию 3600 секунд). - `-p <порт>` - Определяет порт, на котором сервер будет ожидать соединения (по умолчанию 22). - `-q` - Режим молчания. В системный журнал регистрации событий не будет занесено никакой информации. - `-t` - Режим тестирования. Только проверяет соответствие файла конфигурации и безопасность ключей. - `-u <величина>` - Определяет размер полей в структуре utmp хранящей имя удаленной машины. - `-D` - Когда указан этот параметр, sshd не будет переведен в режим работы демона. - `-V <идентификатор_протокола_клиента>` - SSH-2 совместимый режим. - `-4` - Принуждает sshd использовать только IPv4 адреса. - `-6` - Принуждает sshd использовать только IPv6 адреса.
#### Конфиг `sshd` настраивается через `/etc/ssh/sshd.conf` Для применения настроек нужно дёрнуть службу `sshd` Пример: ``` # слушать 22ой порт Port 22
# использовать вторую версию протокола Protocol 2
# запрет логинится под root@* PermitRootLogin no
# доступ к ssh только для определенного пользователя или группы AllowUsers User1, User2, User3 AllowGroups Group1, Group2, Group3
# резрешить запуск X11 приложений X11Forwarding yes ```
Интересный факт: приветствие, выводимое при подключение
_ ## ssh Мощный инструмент, позволяющий как выполнять удаленные команды, так и вертеть трафиком. Синтаксис команды выглядит так: `ssh [опции] [имя пользователя@]<сервер> [команда]` Tip: В `.ssh/config` можно задать псевдонимы в следующем формате: ``` Host radi0ss HostName 188.227.87.62 User root Port 22 ProxyCommand ssh -W %h:%p root@188.227.87.62 ``` #### Опции Общие параметры - `-f` - перевести ssh в фоновый режим; - `-g` - разрешить удалённым машинам обращаться к локальным портам; - `-l <имя>` - имя пользователя, под которым собираемся подключаться к удаленной машине; - `-n` - перенаправить стандартный вывод в /dev/null; - `-N` - указывает, что не запускать удалённый сеанс shell; - `-p <n>` - указать порт для подключения на удалённой машине; - `-q` - не показывать сообщения об ошибках; - `-v` - режим отладки, указанный несколько раз (max 3), сделает ssh более многословным; Перенаправление X11 - `-X` - включить перенаправление X11; - `-x` - отключить перенаправление X11; Перенаправление портов и туннелирование - `-L [локальный_адрес:]локальный_порт:удаленный_адрес:удаленный_порт` - перенаправление локального порта на порт удаленной машины; - `-R [удаленный_адрес:]удаленный_порт:локальный_адрес:локальный_порт` - перенаправление удаленного порта с удаленной машины на локальный порт; - `-D [bind_address:]порт` - создание локального SOCKS-прокси-сервера, перенаправляющего трафик с определенного сокета по зашифрованному каналу на удалённый сервер; - `-w local_tun[:remote_tun]` - создает туннель между локальным и удаленным виртуальными сетевыми интерфейсами (TUN или TAP) с номерами `local_tun` и `remote_tun`. Если указать `any` - выбирается любой. Если не указать `remote_tun` - подразумевается `any`. ==честно говоря, не получалось настроить туннель через tun интерфейсы== Аутентификация и ключи - `-i <path>` - явно указать приватный ключ для подключения; - `-A` - включить переадресацию агента Протоколы и адреса - `-4` - принудительное использование только IPv4 адресов; - `-6` - принудительное использование только IPv6 адресов; - `-1` - принудительное использование SSH протокола только версии 1; - `-2` - принудительное использование SSH протокола только версии 2; Дополнительные параметры - `-C` - включить сжатие данных; - `-t` - переназначить псевдо-терминал для выполнения программ; - `-T` - послать на выполнение команду, не подключаясь к shell; Примеры: ```shell # выполнить команду, не заходя в полноценный сеанс ssh user@host ls # перенаправление бекапа прямо на удалённый сервер sudo dd if=/dev/sda | ssh user@host 'dd of=sda.img' # восстановление бекапа с удаленного сервера ssh user@host 'dd if=sda.img' | dd of=/dev/sda # взятие пароля из файла ssh user@host < local_file.txt # выполнять на сервере прогу «eclipse» и транслировать её окно нам ssh -XC user@remotehost «eclipse» # создание ssh туналя (проброс порта с удалённой машины на локальную) ssh -L локальный_порт:удаленный_адрес:удаленный_порт пользователь@сервер ``` _ ## scp Утилита для копирования файлов на удаленный сервер. ```shell scp /адрес/локального/файла пользователь@хост:адрес/папки ```
Примеры использования: ```shell scp ~/test.txt user@host:documents
# scp непосредственно копирует файл, в то время как передавать файл можно при помощи ssh, но он принимает поток, а не файл. cat localfile | ssh user@host «cat > remotefile» # аналогично: ssh user@host «cat > remotefile» < localfile
# Пойдем еще дальше, вы можете сжимать файлы перед передачей с помощью tar, а потом их сразу же на лету распаковывать: tar czf - /home/user/file | ssh user@host tar -xvzf -C /home/remoteuser/ ```
___ ## ssh-agent По простому: \- это «связка с ключами». Сначала добавляешь ключи туда через `ssh-add`, а потом эта чудо-связка сама ищет подходящий для сервера, к которому пытаемся подключится, ключ. Подробнее: \- это менеджер ключей для SSH, работающий независимо от последнего, запускаясь при первом включении `ssh`. Хранит в памяти ключи, избавляя от необходимости вводить ключевую фразу каждый раз при подключении куда то. Он не записывает ключи на диск и не позволяет экспортировать их. Вот как проверяется ключ пользователя во время SSH-соединения, с точки зрения сервера: - Клиент предоставляет серверу публичный ключ. - Сервер генерирует и отправляет короткое случайное сообщение, прося клиента подписать его с помощью приватного ключа. - Клиент просит агента SSH подписать сообщение и пересылает результат обратно на сервер. - Сервер проверяет подпись, используя публичный ключ клиента. - Теперь у сервера есть доказательство того, что клиент владеет приватным ключом.
Позже в процессе соединения генерируется набор новых, эфемерных и симметричных ключей, которые используются для шифрования трафика сеанса SSH. Эти ключи могут даже не длиться весь сеанс; событие «`rekey`» происходит через регулярные промежутки времени.
#### ssh-add команда ssh-agent для добавления ключей к «ключнице», которую ssh-agent автоматически использует для ssh. При запуске без параметров ищет и добавляет стандартные ключи: - `~/.ssh/id_rsa` - `~/.ssh/id_ed25519` - `~/.ssh/id_dsa` - `~/.ssh/id_ecdsa`
#### переадресация агента Когда для соединения включена переадресация агента (обычно с использованием `ssh -A`), в фоновом режиме открывается второй канал для переадресации любых запросов агента обратно на ваш локальный компьютер. Для ssh нет разницы между локальным и удаленным ssh-agent, так как ssh смотрит лишь на `$SSH_AUTH_SOCK`. При подключении к удаленному хосту с включенной переадресацией агента SSHD создаст удаленный доменный сокет Unix, связанный с каналом переадресации агента, и экспортирует `$SSH_AUTH_SOCK`, указывающий на него.
[!warning]
Когда вы переадресовываете доменный сокет `ssh-agent` Unix на удаленный хост, это создает угрозу безопасности: любой человек с root доступом на удаленном хосте может незаметно получить доступ к вашему локальному SSH-agent’y через сокет. Они могут использовать ваши ключи, чтобы <u>выдавать себя за вас</u> на других машинах в сети.
Совет: