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

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


ssh

Розбіжності

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

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

Both sides previous revision Попередня ревізія
Наступна ревізія
Попередня ревізія
Остання ревізія Both sides next revision
ssh [2014/03/14 12:29]
wombat [Сервер] Перенаправление портов
ssh [2014/11/23 23:06]
wombat SSH key authorization
Рядок 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
 +
 +====== Ссылки ======
 +
 +[[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 20:11 by wombat