Настройка SSH

Содержание

Настройки клиента

Для настройки используемых по умолчанию SSH-ключей и имён пользователей, используемых по умолчанию для подключения к удалённым системам, можно прописать в файл ~/.ssh/config настройки следующего вида:

Host *
    AddKeysToAgent yes
    IdentityFile ~/.ssh/id_rsa
    ForwardAgent yes

Host server1.domain.tld
    User user1
    ProxyJump server2.domain.tld

Host server2.domain.tld
    Hostname server3.domain.tld
    DynamicForward 127.0.0.1:4444

Опция AddKeysToAgent включает автоматический запуск SSH-агента при попытке подключиться к удалённому узлу по SSH и добавление ключей в агента. Можно указать время, на которое ключ будет добавляться в агента, в виде 9h - 9 часов.

Опция IdentityFile указывает приватный SSH-ключ, который будет использоваться для аутентификации на удалённых узлах SSH.

Опция ForwardAgent разрешает запуск SSH-агента на удалённом узле, так что приватный ключ может использоваться для входа с этого удалённого узла на другие узлы.

Опция User позволяет указать имя пользователя, которое будет использоваться в качестве значения по умолчанию, которое совпадает с именем текущего пользователя.

Опция ProxyJump позволяет указать другой SSH-узел, через который будет установлено подключение к интересующему узлу. Полезно, если интересующий узел находится за NAT-сервером внутри сети или если это виртуальная машина, доступная только с сервера виртуализации.

Опция Hostname позволяет указать настоящее имя сервера или его IP-адрес, отличный от имени, указанного SSH-клиенту.

Опция DynamicForward позволяет использовать удалённый узел в качестве SOCKS4-прокси, который будет принимать подключения на указанном интерфейсе и порту локальной системы.

SSH как прокси

SOCKS проксирование

Установите SSH-соединение командой в вашем SSH-клиенте

ssh -D localhost:12345 ваше_имя@адрес_удаленного_компьютера

Опция -D адрес:порт задает туннелирование порта. Ее работа заключается в том, что создается сокет для прослушивания порта на локальной машине, привязанный (необязательно) к конкретному адресу. Когда создается соединение к этому порту, это соединение туннелируется по зашифрованному каналу, и протокол приложения затем используется, чтобы определить, куда соединяться с удаленной машиной. При этом SSH работает как SOCKS сервер (поддерживается 4 и 5 версии протокола).

Переброс локального порта на удаленную машину

Возможно также переадресовывать все соединения на локальный порт через защищенный туннель на удаленную машину. Команда имеет вид:

ssh -L [локальный_адрес:]локальный_порт:удаленный_адрес:удаленный_порт [пользователь@]сервер

После этого все соединения на локальный_адрес:локальный_порт будут переадресовываться удаленному серверу, который будет соединяться с удаленный_адрес:удаленный_порт от своего имени. По умолчанию локальный_адрес соответствует 127.0.0.1. Возможно использование нескольких ключей -L в одном клиенте.

Переброс удаленного порта на локальную машину

Для совершения обратного действия нужно выполнить команду с ключом -R:

ssh -R [удаленный_адрес:]удаленный_порт:локальный_адрес:локальный_порт [пользователь@]сервер

Команда работает также как и в вышеописанном случае только соединения перебрасываются с удаленной машины на локальную.

Проблема с повышением требований к безопасности SSH

После обновления Debian Wheezy до Debian Stretch стало невозможно подключиться к некоторым устройствам по SSH. Проблема в том, что в Stretch ужесточены требования к безопасности подключений SSH.

При попытке подключиться по SSH к некоторым узлам происходит ошибка:

$ /usr/bin/ssh -o ConnectTimeout=5 -o StrictHostKeyChecking=no cuservice@10.16.0.101
Unable to negotiate with 10.16.0.101 port 22: no matching key exchange method found. Their offer: diffie-hellman-group1-sha1

Для того, чтобы разрешить SSH-клиенту использовать указанный метод обмена ключами, нужно вписать в файл /etc/ssh/ssh_config одну дополнительную строчку:

KexAlgorithms +diffie-hellman-group1-sha1

Аналогичная проблема:

Unable to negotiate with 10.16.0.101 port 22: no matching host key type found. Their offer: ssh-dss
$ /usr/bin/ssh -o ConnectTimeout=5 -o StrictHostKeyChecking=no cuservice@10.16.0.101

Решается схожим образом, с той лишь разницей, что добавить нужно другую строчку, разрешающую использовать ключи узлов указанного типа:

HostKeyAlgorithms +ssh-dss

Установка программы для запроса паролей через графический интерфейс

# apt-get install ssh-askpass-gnome

Ссылки