Користувальницькькі налаштування

Налаштування сайту


ssh

Розбіжності

Тут показані розбіжності між вибраною ревізією та поточною версією сторінки.

Посилання на цей список змін

Both sides previous revision Попередня ревізія
ssh [2014/11/23 21:06]
wombat SSH key authorization
ssh [2015/11/18 18:11] (поточний)
wombat Проблемы: diffie-hellman-group1-sha1
Рядок 1: Рядок 1:
 +====== Сервер ======
  
 +Если к серверу необходимо подключаться с компьютеров,​ находящихся в сети с жёсткими ограничениями (вплоть до закрытия всех портов,​ кроме HTTP (80) и HTTPS (443), можно настроить SSH-демон на прослушивание порта 443:
 +
 +<file txt /​etc/​ssh/​sshd_config>​
 +Port 22
 +Port 443
 +</​file>​
 +
 +Однако,​ этот способ не годится,​ если параллельно должен работать веб-сервер,​ выдающий страницы по протоколу HTTPS. В таком случае можно воспользоваться одним из приведённых ниже способов.
 +===== SSH через HTTPS =====
 +
 +Один из способов - настроить веб-сервер на передачу SSH-трафика (определяемого по какому-либо критерию;​ например,​ по заданному URL или доменному имени) SSH-демону,​ работающему на каком-то другом порту.
 +
 +[[http://​blog.chmd.fr/​ssh-over-ssl-episode-3-avoiding-using-a-patched-apache.html | SSH over SSL, episode 3: Avoiding using a patched apache.]]
 +
 +[[http://​dag.wieers.com/​howto/​ssh-http-tunneling/​ | Tunneling SSH over HTTP(S)]]
 +
 +К сожалению,​ в настоящее время (осень 2013) только Apache поддерживает метод "​CONNECT",​ необходимый для этой цели.
 +
 +
 +===== Несколько сервисов на 443 порту =====
 +
 +Можно воспользоваться мультиплексором протоколов [[sslh | sslh]], который слушает порт 443 и сортирует входящий трафик по соответствующим сервисам далее (SSH, веб-сервер,​ ...)
 +===== Web SSH =====
 +
 +https://​en.wikipedia.org/​wiki/​Web-based_SSH
 +
 +[[http://​anyterm.org/​ | AnyTerm]] in C
 +
 +[[http://​code.google.com/​p/​shellinabox/​wiki/​shellinaboxd_man | Shell in a box]]
 +
 +[[https://​github.com/​fgallaire/​achilterm | Achilterm]] in Python
 +
 +===== Перенаправление портов =====
 +
 +Чтобы разрешить клиентам перенаправлять подключения к некоторым портам сервера на свои локальные компьютеры,​ нужно в файле //''/​etc/​ssh/​sshd_config''//​ разрешить параметр ''​GatewayPorts''​. Согласно [[http://​linux.die.net/​man/​5/​sshd_config | man sshd_config]],​ этот параметр может иметь три значения:​ ''​no'',​ ''​yes''​ и ''​clientspecified''​. Будем использовать последнее,​ т.к. оно позволяет клиенту самостоятельно выбрать,​ разрешать внешним компьютерам использование обратного тоннеля или нет.
 +
 +<file txt /​etc/​ssh/​sshd_config>​
 +GatewayPorts clientspecified
 +</​file>​
 +
 +
 +====== Клиент ======
 +
 +===== TCP-тоннель =====
 +
 +Необходимо установить программу,​ создающую TCP-тоннель через прокси-сервер. Например,​ ''​corkscrew''​. После этого отредактировать пользовательский файл настроек SSH следующим образом:​
 +
 +<file txt ~/​.ssh/​config>​
 +Host *
 +  ProxyCommand corkscrew <​proxy_server>​ <​proxy_port>​ %h %p
 +</​file>​
 +
 +Если прокси-сервер требует логина и пароля,​ то конфигурация SSH-клиента должна выглядеть следующим образом:​
 +
 +<file txt ~/​.ssh/​config>​
 +Host *
 +  ProxyCommand corkscrew <​username:​password@proxy_server>​ <​proxy_port>​ %h %p
 +</​file>​
 +
 +Или так? FIXME
 +
 +Создаём файл, содержащий имя пользователя и пароль для доступа к прокси-серверу:​
 +
 +<file txt ~/​.corkscrew-auth>​
 +username:​password
 +</​file>​
 +
 +Затем добавляем путь к этому файлу в файл конфигурации SSH:
 +
 +<file txt ~/​.ssh/​config>​
 +Host *
 +  ProxyCommand corkscrew <​proxy_server>​ <​proxy_port>​ %h %p /​home/​username/​.corkscrew-auth
 +</​file>​
 +
 +
 +===== SSH-тоннель =====
 +
 +  ssh -f -N -L<​local_port>:​jabber.od.ua:​5222 -p <​ssh_server_port>​ <​ssh_server>​
 +
 +''​-f''​ уйти в фон
 +
 +''​-N''​ не выполнять никаких команд
 +
 +===== Обратный SSH-тоннель =====
 +
 +Обратный SSH-тоннель позволяет перенаправлять соединения,​ устанавливаемые с некоторым портом удалённого сервера,​ на наш локальный компьютер((рецепт взят с http://​www.howtoforge.com/​reverse-ssh-tunneling))
 +
 +  ssh -R 19999:​localhost:​22 -p <​ssh_server_port>​ <​ssh_server_user>​@<​ssh_server>​
 +
 +после чего станет возможным с удалённого сервера (<​ssh_server>​) подключаться к локальному компьютеру до тех пор, пока живо вышеустановленное соединение.
 +
 +  ssh localhost -p 19999
 +
 +По умолчанию ssh перенаправляет подключения только к локальному сетевому интерфейсу удалённого сервера (его localhost). Это означает,​ что подключения извне на этом удалённом сервере в указанный порт не принимаются. Если же неообходимо разрешить перенаправление соединений к нашему локальному компьютеру не только непосредственно из консоли удалённого сервера,​ но и для любых других компьютеров глобальной сети, то устанавливать обратный тоннель следует так:
 +
 +  ssh -R *:​19999:​localhost:​22 -p <​ssh_server_port>​ <​ssh_server_user>​@<​ssh_server>​
 +
 +Здесь звёздочка (''​*''​) указывает,​ что "​слушать"​ удалённому серверу надо на всех его сетевых интерфейсов. Вместо неё можно указать и конкретный IP-адрес,​ на котором слушать. Тогда сервер будет принимать подключения только на указанном сетевом интерфейсе.
 +
 +Следует отметить,​ что для реализации последнего варианта необходимо [[ssh#​Перенаправление портов|разрешить на сервере параметр ''​GatewayPorts''​]].
 +
 +Теперь любое подключение к серверу <​ssh_server>​ в порт ''​19999''​ будет перенаправлено на наш локальный компьютер в порт ''​22''​. Разумеется,​ номера портов можно менять на любые другие. С тем только исключением,​ что привелегированные порты использовать может только администратор системы (root).
 +
 +===== Подключение по ключу =====
 +
 +Для того, чтобы подключаться без пароля,​ нужно сгенерировать ключ:
 +
 +==== OpenSSH ====
 +
 +  ssh-keygen -t rsa -b 2048 -f id_rsa.key
 +
 +В результате появятся два файла: секретный ключ -- ''​id_rsa.key''​ и открытый ключ -- ''​id_rsa.key.pub''​. Первый из них необходимо оставить на компьютере-клиенте и сделать доступ к нему для посторонних невозможным (поместить в каталог ''/​home/​taras/​.ssh/''​). Второй -- открытый -- ключ нужно поместить на сервер в домашний каталог того пользователя,​ от имени которого будет осуществляться подключение к серверу (**до**писать к файлу ''/​home/​taras/​.ssh/​authorized_keys''​)
 +
 +Подключаться с использованием этого ключа следует так:
 +
 +  ssh -i .ssh/id_rsa taras@server.org.ua
 +
 +==== Dropbear ====
 +
 +  dropbearkey -t rsa -s 2048 -f id_rsa.key
 +
 +В результате закрытый ключ будет записан в файл ''​id_rsa.key'',​ а на экран будут выведены открытый ключ и отпечаток ("​fingerprint"​):​
 +
 +<​file>​
 +Public key portion is:
 +ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCClbPAs9q4i9WEmtIGX/​XOArDa6r40bRei/​ta6JZA217ucOhzYOabacasYi7HPDEGYqcs95KL5olnMr5UpELUbCyt1THy0W7e0lWbg10NuKkbq4OZAN3Dw59JHBHizWe+p8fsqKfwHrr1YSR6DxiZeKlEv0QWfckBnp3Xq5Y1cWWeMZlOApZTmmWJIvCMdyQwM4SW18nz9UZBkbypfSsZZYxVcht+EjXdBICHehezqwKQZkKnRa3WdTDKP0zKYA0WEQFK4UekPQYrHGS+4kgLiD7jZUS9Wh88sWMJwPcrfo3HgvcIAWTRzKsoUGimWKUYAfK2eMjxAz0GoQAcFYwu7 root@OpenWrt
 +Fingerprint:​ md5 60:​3f:​47:​8e:​19:​99:​94:​53:​29:​83:​83:​3e:​84:​c7:​dd:​09
 +</​file>​
 +
 +В этом случае также надлежит открытый ключ дописать к файлу ''/​home/​taras/​.ssh/​authorized_keys''​ на сервере,​ а закрытый поместить в какой-либо защищённый каталог на компьютере,​ с которого будет происходить подключение.
 +
 +Подключаться с использованием этого ключа следует так:
 +
 +  ssh -i id_rsa.key taras@server.org.ua
 +
 +===== Проблемы =====
 +
 +Если при попытке подключения ssh выдаёт ошибку
 +
 +  Unable to negotiate with example.com:​ no matching key exchange method found. Their offer: diffie-hellman-group1-sha1
 +
 +Это обозначает,​ что сервер предлагает обмен ключей по алгоритму ''​diffie-hellman-group1-sha1'',​ который не рекомендуется,​ начиная с версии OpenSSH 7. В общем случае это обозначает,​ что программа-сервер нуждается в обновлении. Временно можно эту ошибку обойти,​ если в явном виде разрешить своему ssh-клиенту использовать этот алгоритм. Сделать это можно так:
 +
 +  'ssh -oKexAlgorithms=+diffie-hellman-group1-sha1 user@server
 +  ​
 +
 +====== Ссылки ======
 +
 +[[http://​habrahabr.ru/​post/​81607/​ | SSH-туннели — пробрасываем порт]] на Хабрахабре
 +
 +Викикнига [[http://​ru.wikibooks.org/​wiki/​SSH_%D1%82%D1%83%D0%BD%D0%BD%D0%B5%D0%BB%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5 | SSH туннелирование]]
ssh.txt · В останнє змінено: 2015/11/18 18:11 by wombat