SSH — различия между версиями

Материал из Корпоративная wiki Администрации города Волгодонски
Перейти к: навигация, поиск
(Обратные туннели)
м (Откат правок Litvinyuk (обсуждение) к версии Podlasenko)
Строка 1: Строка 1:
 
== Обратные туннели ==
 
== Обратные туннели ==
  
Есть сервер с динамическим не публичным IP1 - С1.
+
Есть сервер с динамическим IP1 - С1.
 +
Есть сервер со статическим, публичным, белым и тд. IP2 - С2.
 +
Админить сервер С2 не проблематично - заходим на IP2 и работаем...
  
Есть сервер со статическим публичным, "белым" IP2 - С2.
+
А как быть с сервером С1? Ведь клиенты хотят чтобы админ всегда мог поправить проблему сервера за 5 минут.
  
Почему-то на всех найденных в интернете статья данная функция SSH описана неправильно, но согласно документации обратный SSH-тоннель создается командой запущенной на сервере C1:
+
Обратный тоннель SSH нам (админам) в помощь.
 +
 
 +
Почему-то на всех найденных в интернете статья данная функция SSH описана неправильно. Здесь и сейчас не буду проводить расследование по этому поводу (мб в прошлых версиях иначе было).
 +
 
 +
Согласно документации обратный SSH-тоннель создается командой запущенной на сервере С1:
 
  ssh -fNTR bind_address:port:host:hostport user@server
 
  ssh -fNTR bind_address:port:host:hostport user@server
 
теперь разберем что есть что:
 
теперь разберем что есть что:
Строка 15: Строка 21:
 
-T — отключение псевдо-терминала (pts) полезно если нужно запускать эту команду по крону
 
-T — отключение псевдо-терминала (pts) полезно если нужно запускать эту команду по крону
  
-R [bind_address:]port - собственно приказание ssh создать reverse тоннель.
+
-R [bind_address:]port - собственно приказание ssh создрать reverse тоннель.
  
bind_address - один из адресов сервера C2 или * - указываем по какому из адресов будет вход в тоннель.
+
bind_address - один из адресов сервера С2 или * - указываем по какому из адресов будет вход в тоннель.
  
port - порт на сервере C2, который и будет входом в тоннель.
+
port - порт на сервере С2, который и будет входом в тоннель.
  
host - Это адрес выхода из тоннеля. <!-- Гммм... Что будет если написать не localhost я пока не знаю... -->
+
host - Это адрес выхода из тоннеля. Гммм... Что будет если написать не localhost я пока не знаю...
 
* TODO: Проверить что localhost=hostname (если имя конечно нормально распознаётся DNS)=IP принадлежащий localhost
 
* TODO: Проверить что localhost=hostname (если имя конечно нормально распознаётся DNS)=IP принадлежащий localhost
  
Строка 28: Строка 34:
 
user - пользователь на сервере server.
 
user - пользователь на сервере server.
  
server - сервер со статическим публичным адресом C2.
+
server - сервер С2.
  
Т.о. если мы хотим сделать доступ к ssh сервера C1 на любом адресе сервера C2 на порту 20022, то запускаем на сервере С1 команду:
+
Т.о. если мы хотим сделать доступ к ssh сервера С1 на любом адресе сервера С2 на порту 20022, то запускаем на сервере С1 команду:
 
  ssh -f -R *:20022:localhost:22 userС2@С2
 
  ssh -f -R *:20022:localhost:22 userС2@С2
 
После чего с любого места интернета запускаем:
 
После чего с любого места интернета запускаем:
  ssh -p 22 userС1@С2
+
  ssh -p 20022 userС1@С2
и получаем консоль сервера С1.
+
и получаем консоль сервера С1!
  
 
;TODO:
 
;TODO:

Версия 16:27, 9 ноября 2016

Обратные туннели

Есть сервер с динамическим IP1 - С1. Есть сервер со статическим, публичным, белым и тд. IP2 - С2. Админить сервер С2 не проблематично - заходим на IP2 и работаем...

А как быть с сервером С1? Ведь клиенты хотят чтобы админ всегда мог поправить проблему сервера за 5 минут.

Обратный тоннель SSH нам (админам) в помощь.

Почему-то на всех найденных в интернете статья данная функция SSH описана неправильно. Здесь и сейчас не буду проводить расследование по этому поводу (мб в прошлых версиях иначе было).

Согласно документации обратный SSH-тоннель создается командой запущенной на сервере С1:

ssh -fNTR bind_address:port:host:hostport user@server

теперь разберем что есть что:

-f - запуск ssh в фоновом режиме без запуска команд (иначе мы получим командную строку server).

-N — не выполнять удаленных команд;

-T — отключение псевдо-терминала (pts) полезно если нужно запускать эту команду по крону

-R [bind_address:]port - собственно приказание ssh создрать reverse тоннель.

bind_address - один из адресов сервера С2 или * - указываем по какому из адресов будет вход в тоннель.

port - порт на сервере С2, который и будет входом в тоннель.

host - Это адрес выхода из тоннеля. Гммм... Что будет если написать не localhost я пока не знаю...

  • TODO: Проверить что localhost=hostname (если имя конечно нормально распознаётся DNS)=IP принадлежащий localhost

hostport - Это порт выхода из тоннеля.

user - пользователь на сервере server.

server - сервер С2.

Т.о. если мы хотим сделать доступ к ssh сервера С1 на любом адресе сервера С2 на порту 20022, то запускаем на сервере С1 команду:

ssh -f -R *:20022:localhost:22 userС2@С2

После чего с любого места интернета запускаем:

ssh -p 20022 userС1@С2

и получаем консоль сервера С1!

TODO
Как поднимать потерянное соединение при смене IP у С1;
Что будет если не localhost написать ну и еще чего-нибудь.

Ссылки

Как Ваш компьютер может дать доступ к себе через туннель средствами ssh, autossh, autosshd Wiki ALT Linux

Памятка пользователям ssh