мета-данные страницы
  •  

Различия

Показаны различия между двумя версиями страницы.

Ссылка на это сравнение

Предыдущая версия справа и слеваПредыдущая версия
Следующая версия
Предыдущая версия
soft:openssh [2025/03/17 16:50] radi0devsoft:openssh [2025/11/09 12:07] (текущий) – внешнее изменение A User Not Logged in
Строка 1: Строка 1:
 +====== openssh ======
 +
 +
 https://habr.com/ru/companies/skillfactory/articles/503466/ https://habr.com/ru/companies/skillfactory/articles/503466/
-[[SSH|Подробнее о протоколе SSH]] 
  
-___ +===== ssh-keygen ===== 
-## ssh-keygen+
 Программа-генератор RSA/DSA ключей Программа-генератор RSA/DSA ключей
  
-#### Синтаксис +==== Синтаксис ==== 
-```shell+ 
 +<code bash>
 ssh-keygen [-q] [-b <bits>] [-t <type>] [-N <new_passphrase>] [-C <comment>] [-f <output_keyfile>] 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>] ssh-keygen -p [-P <old_passphrase>] [-N <new_passphrase>] [-f <keyfile>]
-```+</code>
  
-#### Опции+==== Опции ====
  
-`-f <~/.ssh/id_srv2>- указывает имя/путь файла ключа. +''-f <~/.ssh/id_srv2>'' - указывает имя/путь файла ключа.\\ 
-`-t <технология шифрования>- выбор технологии (`rsa1``dsa`). +''-t <технология шифрования>'' - выбор технологии (''rsa1''''dsa'').\\ 
-`-b <размер ключа в битах>- задаем размер ключа. +''-b <размер ключа в битах>'' - задаем размер ключа.\\ 
-`-N <_new_passphrase_>- обеспечивает ввод новой ключевой фразы. +''-N <_new_passphrase_>'' - обеспечивает ввод новой ключевой фразы.\\ 
-`-P <passphrase>- обеспечивает ввод (старой) ключевой фразы. +''-P <passphrase>'' - обеспечивает ввод (старой) ключевой фразы.\\ 
-`-p- запрашивает изменение ключевой фразы приватного ключа вместо создания нового приватного ключа. Предложит указать имя файла содержащего приватный ключ, старую ключевую фразу и, дважды, новую ключевую фразу. +''-p'' - запрашивает изменение ключевой фразы приватного ключа вместо создания нового приватного ключа. Предложит указать имя файла содержащего приватный ключ, старую ключевую фразу и, дважды, новую ключевую фразу.\\ 
-`-C <comment>- обеспечивает ввод нового комментария. +''-C <comment>'' - обеспечивает ввод нового комментария.\\ 
-`-D <reader>- копировать публичный RSA-ключ на smartcard в устройстве _reader_. +''-D <reader>'' - копировать публичный RSA-ключ на smartcard в устройстве _reader_.
-___+
  
-## sshd +===== sshd ===== 
-**sshd** - это демон, который ожидает соединения от клиентов. Обычно он запускается при загрузке системы из `/etc/rc`. Он создает нового демона для каждого нового соединения. Ответвленный демон обрабатывает обмен ключами, шифрование, аутентификацию, выполнение команд и обмен данными. Эта реализация **sshd** поддерживает обе версии протокола SSH, 1 и 2, одновременно. + 
 +''sshd'' - это демон, который ожидает соединения от клиентов. Обычно он запускается при загрузке системы из ''/etc/rc''. Он создает нового демона для каждого нового соединения. Ответвленный демон обрабатывает обмен ключами, шифрование, аутентификацию, выполнение команд и обмен данными. Эта реализация sshd поддерживает обе версии протокола SSH, 1 и 2, одновременно. 
  
 Синтаксис команды:  Синтаксис команды: 
-```shell+<code bash>
 sshd [-deiqtDL46] [-b <битов>] [-f <файл_конфигурации>] [-g <время_задержки_регистрации>] [-h <файл_ключа_машины>] [-k <время_генерации_ключа>] [-p <порт>] [-u <величина>] [-V <идентификатор_протокола_клиента>] sshd [-deiqtDL46] [-b <битов>] [-f <файл_конфигурации>] [-g <время_задержки_регистрации>] [-h <файл_ключа_машины>] [-k <время_генерации_ключа>] [-p <порт>] [-u <величина>] [-V <идентификатор_протокола_клиента>]
-```+</code> 
 + 
 +==== Опции ==== 
 + 
 +- ''-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 адреса. 
  
-#### Опции +==== Конфиг ====
-- `-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настраивается через `/etc/ssh/sshd.conf` +Для применения настроек нужно дёрнуть службу ''sshd''
-Для применения настроек нужно дёрнуть службу `sshd`+
 Пример: Пример:
-```+<code>
 # слушать 22ой порт # слушать 22ой порт
 Port 22  Port 22 
Строка 70: Строка 75:
 # резрешить запуск X11 приложений # резрешить запуск X11 приложений
 X11Forwarding yes X11Forwarding yes
-```+</code>
  
 Интересный факт: приветствие, выводимое при подключение  Интересный факт: приветствие, выводимое при подключение 
  
-___ +===== ssh ===== 
-## ssh+
 Мощный инструмент, позволяющий как выполнять удаленные команды, так и вертеть трафиком. Мощный инструмент, позволяющий как выполнять удаленные команды, так и вертеть трафиком.
  
-Синтаксис команды выглядит так: +Синтаксис команды выглядит так:\\ 
-`ssh [опции] [имя пользователя@]<сервер> [команда]`+''ssh [опции] [имя пользователя@]<сервер> [команда]''
  
 Tip: Tip:
-В `.ssh/configможно задать псевдонимы в следующем формате: +В ''.ssh/config'' можно задать псевдонимы в следующем формате:\\ 
-```+<code>
 Host radi0ss Host radi0ss
     HostName 188.227.87.62     HostName 188.227.87.62
Строка 89: Строка 94:
     Port 22     Port 22
     ProxyCommand ssh -W %h:%p root@188.227.87.62     ProxyCommand ssh -W %h:%p root@188.227.87.62
-``` +</code> 
-#### Опции + 
-Общие параметры   +==== Опции ==== 
-`-f- перевести ssh в фоновый режим;   + 
-`-g- разрешить удалённым машинам обращаться к локальным портам;   +Общие параметры  \\ 
-`-l <имя>- имя пользователя, под которым собираемся подключаться к удаленной машине;   +''-f'' - перевести ssh в фоновый режим;  \\ 
-`-n- перенаправить стандартный вывод в /dev/null;   +''-g'' - разрешить удалённым машинам обращаться к локальным портам;  \\ 
-`-N- указывает, что не запускать удалённый сеанс shell;   +''-l <имя>'' - имя пользователя, под которым собираемся подключаться к удаленной машине;  \\ 
-`-p <n>- указать порт для подключения на удалённой машине;   +''-n'' - перенаправить стандартный вывод в /dev/null;  \\ 
-`-q- не показывать сообщения об ошибках;   +''-N'' - указывает, что не запускать удалённый сеанс shell;  \\ 
-`-v- режим отладки, указанный несколько раз (max 3), сделает ssh более многословным;  +''-p <n>'' - указать порт для подключения на удалённой машине;  \\ 
 +''-q'' - не показывать сообщения об ошибках;  \\ 
 +''-v'' - режим отладки, указанный несколько раз (max 3), сделает ssh более многословным;  \\
      
-Перенаправление X11   +Перенаправление X11  \\ 
-`-X- включить перенаправление X11;   +''-X'' - включить перенаправление X11;  \\ 
-`-x- отключить перенаправление X11;  +''-x'' - отключить перенаправление X11;  \\
      
-Перенаправление портов и туннелирование +Перенаправление портов и туннелирование\\ 
-`-L [локальный_адрес:]локальный_порт:удаленный_адрес:удаленный_порт- перенаправление локального порта на порт удаленной машины;  +''-L [локальный_адрес:]локальный_порт:удаленный_адрес:удаленный_порт'' - перенаправление локального порта на порт удаленной машины; \\ 
-`-R [удаленный_адрес:]удаленный_порт:локальный_адрес:локальный_порт- перенаправление удаленного порта с удаленной машины на локальный порт;  +''-R [удаленный_адрес:]удаленный_порт:локальный_адрес:локальный_порт'' - перенаправление удаленного порта с удаленной машины на локальный порт; \\ 
-`-D [bind_address:]порт- создание локального SOCKS-прокси-сервера, перенаправляющего трафик с определенного сокета по зашифрованному каналу на удалённый сервер;   +''-D [bind_address:]порт'' - создание локального SOCKS-прокси-сервера, перенаправляющего трафик с определенного сокета по зашифрованному каналу на удалённый сервер;  \\ 
-`-w local_tun[:remote_tun]- создает туннель между локальным и удаленным [[Виртуальные сетевые интерфейсы|виртуальными сетевыми интерфейсами]] (TUN или TAP) с номерами `local_tunи `remote_tun`.  Если указать `any- выбирается любой. Если не указать `remote_tun- подразумевается `any`==честно говоря, не получалось настроить туннель через tun интерфейсы==+''-w local_tun[:remote_tun]'' - создает туннель между локальным и удаленным [[Виртуальные сетевые интерфейсы|виртуальными сетевыми интерфейсами]] (TUN или TAP) с номерами ''local_tun'' и ''remote_tun''.  Если указать ''any'' - выбирается любой. Если не указать ''remote_tun'' - подразумевается ''any''<nowiki>честно говоря, не получалось настроить туннель через tun интерфейсы</nowiki> \\
      
-Аутентификация и ключи   +Аутентификация и ключи  \\ 
-`-i <path>- явно указать приватный ключ для подключения;   +''-i <path>'' - явно указать приватный ключ для подключения;  \\ 
-`-A- включить переадресацию агента+''-A'' - включить переадресацию агента
      
-Протоколы и адреса   +Протоколы и адреса  \\ 
-`-4- принудительное использование только IPv4 адресов;   +''-4'' - принудительное использование только IPv4 адресов;  \\ 
-`-6- принудительное использование только IPv6 адресов;   +''-6'' - принудительное использование только IPv6 адресов;  \\ 
-`-1- принудительное использование SSH протокола только версии 1;   +''-1'' - принудительное использование SSH протокола только версии 1;  \\ 
-`-2- принудительное использование SSH протокола только версии 2;  +''-2'' - принудительное использование SSH протокола только версии 2;  \\
      
-Дополнительные параметры   +Дополнительные параметры  \\ 
-`-C- включить сжатие данных;   +''-C'' - включить сжатие данных;  \\ 
-`-t- переназначить псевдо-терминал для выполнения программ; +''-t'' - переназначить псевдо-терминал для выполнения программ;\\ 
-`-T- послать на выполнение команду, не подключаясь к shell;+''-T'' - послать на выполнение команду, не подключаясь к shell;\\
  
 Примеры: Примеры:
-```shell+<code bash>
 # выполнить команду, не заходя в полноценный сеанс # выполнить команду, не заходя в полноценный сеанс
 ssh user@host ls  ssh user@host ls 
Строка 144: Строка 151:
 # создание ssh туналя (проброс порта с удалённой машины на локальную) # создание ssh туналя (проброс порта с удалённой машины на локальную)
 ssh -L локальный_порт:удаленный_адрес:удаленный_порт пользователь@сервер ssh -L локальный_порт:удаленный_адрес:удаленный_порт пользователь@сервер
-```+</code> 
 + 
 +===== scp =====
  
-___ 
-## scp 
 Утилита для копирования файлов на удаленный сервер. Утилита для копирования файлов на удаленный сервер.
-```shell+<code bash>
 scp /адрес/локального/файла пользователь@хост:адрес/папки scp /адрес/локального/файла пользователь@хост:адрес/папки
-```+</code>
  
 Примеры использования: Примеры использования:
-```shell+<code bash>
 scp ~/test.txt user@host:documents scp ~/test.txt user@host:documents
  
Строка 164: Строка 171:
 # Пойдем еще дальше, вы можете сжимать файлы перед передачей с помощью tar, а потом их сразу же на лету распаковывать: # Пойдем еще дальше, вы можете сжимать файлы перед передачей с помощью tar, а потом их сразу же на лету распаковывать:
 tar czf - /home/user/file | ssh user@host tar -xvzf -C /home/remoteuser/ tar czf - /home/user/file | ssh user@host tar -xvzf -C /home/remoteuser/
-```+</code> 
 + 
 +===== ssh-agent ===== 
 +  
 +По простому:\\ 
 +''\''- это "связка с ключами". Сначала добавляешь ключи туда через ''ssh-add'', а потом эта чудо-связка сама ищет подходящий для сервера, к которому пытаемся подключится, ключ.\\ 
 +Подробнее:\\ 
 +''\''- это менеджер ключей для SSH, работающий независимо от последнего, запускаясь при первом включении ''ssh''. Хранит в памяти ключи, избавляя от необходимости вводить ключевую фразу каждый раз при подключении куда то.  Он не записывает ключи на диск и не позволяет экспортировать их. \\ 
 +Вот как проверяется ключ пользователя во время SSH-соединения, с точки зрения сервера:\\ 
 +- Клиент предоставляет серверу публичный ключ.\\ 
 +- Сервер генерирует и отправляет короткое случайное сообщение, прося клиента подписать его с помощью приватного ключа.\\ 
 +- Клиент просит **агента** SSH подписать сообщение и пересылает результат обратно на сервер.\\ 
 +- Сервер проверяет подпись, используя публичный ключ клиента.\\ 
 +- Теперь у сервера есть доказательство того, что клиент владеет приватным ключом.\\ 
 + 
 +Позже в процессе соединения генерируется набор новых, эфемерных и симметричных ключей, которые используются для шифрования трафика сеанса SSH. Эти ключи могут даже не длиться весь сеанс; событие "''rekey''" происходит через регулярные промежутки времени.
  
-___ +==== ssh-add ====
-## ssh-agent +
-По простому: +
-\- это "связка с ключами". Сначала добавляешь ключи туда через `ssh-add`, а потом эта чудо-связка сама ищет подходящий для сервера, к которому пытаемся подключится, ключ. +
-Подробнее: +
-\- это менеджер ключей для SSH, работающий независимо от последнего, запускаясь при первом включении `ssh`. Хранит в памяти ключи, избавляя от необходимости вводить ключевую фразу каждый раз при подключении куда то.  Он не записывает ключи на диск и не позволяет экспортировать их.  +
-Вот как проверяется ключ пользователя во время SSH-соединения, с точки зрения сервера: +
-- Клиент предоставляет серверу публичный ключ. +
-- Сервер генерирует и отправляет короткое случайное сообщение, прося клиента подписать его с помощью приватного ключа. +
-- Клиент просит **агента** SSH подписать сообщение и пересылает результат обратно на сервер. +
-- Сервер проверяет подпись, используя публичный ключ клиента. +
-- Теперь у сервера есть доказательство того, что клиент владеет приватным ключом.+
  
-Позже в процессе соединения генерируется набор новых, эфемерных и симметричных ключей, которые используются для шифрования трафика сеанса SSH. Эти ключи могут даже не длиться весь сеанс; событие "`rekey`" происходит через регулярные промежутки времени.+команда ssh-agent для добавления ключей к "ключнице", которую ssh-agent автоматически использует для ssh. При запуске без параметров ищет и добавляет ключи со стандартными путями:\\ 
 +- ''~/.ssh/id_rsa''\\ 
 +- ''~/.ssh/id_ed25519''\\ 
 +- ''~/.ssh/id_dsa''\\ 
 +- ''~/.ssh/id_ecdsa''
  
-#### ssh-add +==== переадресация агента ====
-команда ssh-agent для добавления ключей к "ключнице", которую ssh-agent автоматически использует для ssh. При запуске без параметров ищет и добавляет стандартные ключи: +
-- `~/.ssh/id_rsa` +
-- `~/.ssh/id_ed25519` +
-- `~/.ssh/id_dsa` +
-- `~/.ssh/id_ecdsa`+
  
-#### переадресация агента +Когда для соединения включена переадресация агента (обычно с использованием ''ssh -A''), в фоновом режиме открывается второй канал для переадресации любых запросов агента обратно на ваш локальный компьютер. 
-Когда для соединения включена переадресация агента (обычно с использованием `ssh -A`), в фоновом режиме открывается второй канал для переадресации любых запросов агента обратно на ваш локальный компьютер. +Для ssh нет разницы между локальным и удаленным ssh-agent, так как ssh смотрит лишь на ''$SSH_AUTH_SOCK''. При подключении к удаленному хосту с включенной переадресацией агента SSHD создаст удаленный доменный сокет Unix, связанный с каналом переадресации агента, и экспортирует ''$SSH_AUTH_SOCK'', указывающий на него.
-Для ssh нет разницы между локальным и удаленным ssh-agent, так как ssh смотрит лишь на `$SSH_AUTH_SOCK`. При подключении к удаленному хосту с включенной переадресацией агента SSHD создаст удаленный доменный сокет Unix, связанный с каналом переадресации агента, и экспортирует `$SSH_AUTH_SOCK`, указывающий на него.+
 > [!warning] > [!warning]
-> Когда вы переадресовываете доменный сокет `ssh-agentUnix на удаленный хост, это создает угрозу безопасности: любой человек с root доступом на удаленном хосте может незаметно получить доступ к вашему локальному SSH-agent’y через сокет. Они могут использовать ваши ключи, чтобы <u>выдавать себя за вас</u> на других машинах в сети.+> Когда вы переадресовываете доменный сокет ''ssh-agent'' Unix на удаленный хост, это создает угрозу безопасности: любой человек с root доступом на удаленном хосте может незаметно получить доступ к вашему локальному SSH-agent’y через сокет. Они могут использовать ваши ключи, чтобы <u>выдавать себя за вас</u> на других машинах в сети.
 > >
 > Совет: > Совет:
-> Заблокируйте свой ssh-агент, когда вы используете переадресацию агента. `ssh-add -xблокирует агент паролем, а `ssh-add -Xразблокирует его. Когда вы подключены к удаленному хосту с переадресацией агента, никто не сможет проникнуть в ваш агент без пароля.+> Заблокируйте свой ssh-агент, когда вы используете переадресацию агента. ''ssh-add -x'' блокирует агент паролем, а ''ssh-add -X'' разблокирует его. Когда вы подключены к удаленному хосту с переадресацией агента, никто не сможет проникнуть в ваш агент без пароля.