SSH — различия между версиями
Litvinyuk (обсуждение | вклад) (→Обратные туннели) |
Litvinyuk (обсуждение | вклад) м (Откат правок Litvinyuk (обсуждение) к версии Podlasenko) |
||
Строка 1: | Строка 1: | ||
== Обратные туннели == | == Обратные туннели == | ||
− | Есть сервер с динамическим | + | Есть сервер с динамическим IP1 - С1. |
+ | Есть сервер со статическим, публичным, белым и тд. IP2 - С2. | ||
+ | Админить сервер С2 не проблематично - заходим на IP2 и работаем... | ||
− | + | А как быть с сервером С1? Ведь клиенты хотят чтобы админ всегда мог поправить проблему сервера за 5 минут. | |
− | Почему-то на всех найденных в интернете статья данная функция SSH описана неправильно | + | Обратный тоннель 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 | + | -R [bind_address:]port - собственно приказание ssh создрать reverse тоннель. |
− | bind_address - один из адресов сервера | + | bind_address - один из адресов сервера С2 или * - указываем по какому из адресов будет вход в тоннель. |
− | port - порт на сервере | + | port - порт на сервере С2, который и будет входом в тоннель. |
− | host - Это адрес выхода из тоннеля. | + | host - Это адрес выхода из тоннеля. Гммм... Что будет если написать не localhost я пока не знаю... |
* TODO: Проверить что localhost=hostname (если имя конечно нормально распознаётся DNS)=IP принадлежащий localhost | * TODO: Проверить что localhost=hostname (если имя конечно нормально распознаётся DNS)=IP принадлежащий localhost | ||
Строка 28: | Строка 34: | ||
user - пользователь на сервере server. | user - пользователь на сервере server. | ||
− | server - сервер | + | server - сервер С2. |
− | Т.о. если мы хотим сделать доступ к ssh сервера | + | Т.о. если мы хотим сделать доступ к 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 | + | 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 написать ну и еще чего-нибудь.