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

Это старая версия документа!


openssh

ssh-keygen

Программа-генератор RSA/DSA ключей

Синтаксис

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, одновременно.

Синтаксис команды:

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;

Примеры:

# выполнить команду, не заходя в полноценный сеанс
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

Утилита для копирования файлов на удаленный сервер.

scp /адрес/локального/файла пользователь@хост:адрес/папки

Примеры использования:

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> на других машинах в сети.

Совет:
Заблокируйте свой ssh-агент, когда вы используете переадресацию агента. ssh-add -x блокирует агент паролем, а ssh-add -X разблокирует его. Когда вы подключены к удаленному хосту с переадресацией агента, никто не сможет проникнуть в ваш агент без пароля.