Як ssh на сервер, до якого я безпосередньо не можу дістатися?


17

Контекст

Я використовую Ubuntu Desktop як свою основну машину, яку я буду називати D. Я хочу підключитися до сервера S через ssh, але брандмауер блокує мене.

У мене є доступ до сервера S через дуже громіздкий шлях із залученням віртуальної машини Windows та PuTTY . Це робить роботу з цим сервером надзвичайно дратівливою: зовсім інше середовище, копіювати / вставляти не працює, я не можу належним чином використовувати свій робочий стіл під час підключення до нього (Alt-Tab зламана віртуальною машиною) тощо

Я переконався, що я можу перенести з сервера S на свій робочий стіл D (навпаки від того, що мені потрібно).

Чи можу я якось ініціювати "переадресацію порту" або подібне з сервера, щоб я міг ssh на сервер зі свого робочого столу?


2
Стрибайте господарі ... треба любити їх !!!
RonJohn

Можливий дублікат Tunnel SSH від A-> B-> C
muru

@muru це вже інший сценарій, але, звичайно, пов'язаний (справа тут у тунелі!). У цьому випадку я хочу підробити D->S, зловживаючиS->D
dangonfast

Відповіді:


32

Ви можете використовувати таку команду, щоб налаштувати тунель SSH з віддаленого сервера на локальну машину:

$ ssh -f -N -R 1234:localhost:22 user@your_machine_ip

Коли тунель налаштований, ви можете просто сш на ваш віддалений сервер за допомогою наступної команди:

$ ssh -p 1234 user@localhost

Зверніть увагу, що вам потрібно налаштувати ключі ssh для автоматичного входу (не вимагає введення пароля). Якщо ви хочете створити тунель SSH інтерактивно, ви можете видалити параметри -f -N. Для отримання додаткової інформації man ssh.


Як працює цей тунель через Windows VM? (Там, де я працюю, є декілька шарів брандмауерів, і лише кілька портів відкрито.)
RonJohn,

@RonJohn Я вважаю, що для цього використовується той факт, що (для OP) ssh-ing з сервера на робочий стіл працює, тому це налаштовує тунель від сервера (порт 22) безпосередньо до настільної машини (порт 1234), який можна використовувати підключитися до ssh на сервері (який використовує порт 22). Windows VM використовується лише для налаштування тунелю. (Будь ласка, виправте мене, якщо я помиляюся)
pizzapants184

@dangonfast Окрім відповіді, ви можете знайти такий ціннісний документ: spencerstirling.com/computergeek/sshtunnel.html
Прифтан

@RonJohn Документ, до якого я тільки що зв'язався, може допомогти відповісти і на це питання, принаймні, що стосується декількох шарів брандмауерів тощо. згадав, що мав посилання з років тому).
Прифтан

1
@ pizzapants184, справді, це було моєю відправною точкою: ssh від S -> D, тому я хочу зловживати цим, щоб ефективно робити D -> S, навіть якщо це не спрямоване на роботу. Чому така конфігурація мережі - це те, що мені уникає. Це може бути навмисно чи помилково, але поки це працює для мене ...
dangonfast

5

Якщо ви використовуєте більш нову версію OpenSSH (7.3+), ви можете використовувати, ProxyJumpяка випікає все разом магічно:

ssh -J windows_machine remote_server

Що на ваш ~/.ssh/configпогляд виглядає так:

Host remote_server
        HostName remote_server
        ProxyJump windows_machine
        User myname

ProxyJumpпідтримує повний синтаксис SSH, тому якщо ви jimввімкнено, windows_serverвін використовує порт 2222для ssh. remote_serverзнаходиться в IP 192.168.0.110з того windows_serverчасу, ви можете написати:

Host remote_server
        HostName 192.168.0.110
        ProxyJump jim@windows_machine:2222
        User myname

А ще просто бігайте, ssh remote_serverщоб туди потрапити.


Якщо ви використовуєте старішу версію SSH, використовуйте ProxyCommand - це дозволяє сказати SSH спочатку виконати команду для встановлення проксі-з'єднання, перш ніж запустити фактичну команду SSH.

ssh -o ProxyCommand='ssh -W %h:%p windows_machine' remote_server

Для цього використовується опція SSH -W , що є скороченням для більш прихованого синтаксису netcat .

Зауважте, що коли ви запускаєтесь, ssh remote_serverвам зараз windows_machineпотрібно переконатися, що ви використовуєте IP-адресу remove_server з вікна стрибка, а не IP-адреси з вашої машини - вони цілком можуть бути однаковими.

Потім ви можете додати цю директиву у свій ~/.ssh/configфайл:

Host remote_server
  HostName remote_server
  User myname
  ProxyCommand ssh -W %h:%p windows_machine

Це означає, що якщо remote_server це інша машина, як видно з того windows_machineчасу, ви можете помістити це в конфігурацію і все одно просто використовувати ssh remote_server.


1
Це набагато краща відповідь.
Роберт Ридл

Це корисно, але це не дає відповіді на запитання. OP заявляє, що вони не можуть SSH від D-> S (що вони хочуть), але вони можуть SSH від S-> D. Між ними немає ssh-проксі-серверів (натомість є віртуальна машина Windows, напевно, доступ до неї RDP).
mbrig

@mbrig дійсно. Я не пробував цього рішення, але був би здивований, якщо він спрацьовує: мене
загрожують

Але ви кажете, що можете потрапити до машини Windows - з цього я зрозумів, що це може діяти як стрибок між вами та іншою машиною.
Павук Борис

1
Я можу увійти в систему Windows за допомогою пропітерного інструменту (VMWare Horizon). Я ніколи не казав, що можу на це збитися. Я навіть перевірив це, перш ніж розміщувати це питання, встановивши ssh-сервер Putty-супутника (я забув ім'я), але мої тести не вдалися. Я припускаю, що ssh також відкривається для підмережі Windows.
dangonfast

1

Замість того, щоб намагатися обходити речі і створювати переплутаний шлях, чи не можете ви просто попросити SSH з робочого столу на сервер дозволено? Якщо у вас є потреба в цьому, і ви маєте доступ до сервера, я не можу зрозуміти, чому ви відмовили б у запиті.


Хочете пояснити голосування? Питання полягає в тому, як "ssh на сервер, до якого я безпосередньо не можу дістатися?" тож у моїй відповіді встановлено правило брандмауера, щоб воно було допустимим. Це також правильний спосіб обійти його відповідно до належної практики безпеки.
Solarflare

Я в перший тиждень тримісячного контракту великого корпоративного клієнта. Мені не дали ноутбук (я використовую свій), а ледве письмовий стіл. Я отримав десятки повноважень, щоб користуватися різними послугами, і я ледве встигаю жонглювати цілою справою. Те, що я хочу зробити, - це не важка вимога виконувати свою роботу: я можу працювати у ВМ, і саме це скаже мій начальник, якщо я почну задавати кумедні запитання. Або він вкаже мені на Службу довідки, яка протягом наступних кількох тижнів / місяців відкине банку вниз.
dangonfast

Для мене робота в VM легко означатиме втрату продуктивності на 50%, тому я хочу її максимально уникати. Все-таки я люблю цей концерт!
dangonfast

1
Я можу це зрозуміти. На мій досвід, «великі корпоративні клієнти», як правило, сильно засмучуються, коли підрядники обходять брандмауери та політику, щоб виконати свою роботу, навіть якщо це для альтруїстичних цілей. Той факт, що ви можете SSH з сервера на робочий стіл, говорить мені, що або ви не можете зробити зворотний процес - це нагляд або щось, що було встановлено для певної мети.
Solarflare

4
Це єдине реальне рішення, якщо ви хочете уникнути ризику звільнитись за обхід політики ... Принаймні, поговоріть з відповідальними особами, перш ніж використовувати рішення Халедса, щоб вони дізналися, що ви збираєтеся.
Свен
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.