ssh multi-hop… адаптуючи команду до файлу ssh config


10

Я намагаюся помістити свою команду multi-hop ssh у файл ssh .ssh / config.

Це мій графік підключення: ноутбук (я тут) ------> userver -------> робоча станція

Я поставив ssh-загальнодоступні ключі rsa у "userver" та "workstation". На даний момент я можу підключитися, ввівши цей рядок:

ssh -A -t userserver@userver ssh -A userworkstation@workstation

Однак я хотів би мати можливість використовувати конфігураційний файл у ~ / .ssh / config, щоб досягти того самого ефекту, але за допомогою однієї простої команди, яка також дозволила б мені зробити швидку копію "scp". Єдина проблема полягає в тому, що у "userver" немає команди "nc", і у мене немає суперпользователя, просто управління моєю домашньою папкою. Тим не менш, я спробував деякі речі:

У мене цей конфігураційний файл у моєму ноутбуці (~ / .ssh / config):

# laptop config file
Host userver
Hostname userver_hostname
port 22
User server_user

Також інший конфігураційний файл у користувальницькому (~ / .ssh / config)

# userver config file
Host workstation
Hostname workstation_hostname
port 22
user workstation_username

З цим файлом конфігурації я можу підключитися як

ssh -A -t userver ssh -A workstation

що є вдосконаленням, але недостатньо. Я спробував додати ще один хост у конфігурацію своїх ноутбуків, наприклад:

Host hop
ProxyCommand ssh -A -t userver ssh -A workstation

Потім, коли я це роблю

ssh hop

я отримую наступний вихід з помилками і не можу підключитися:

Pseudo-terminal will not be allocated because stdin is not a terminal.
Pseudo-terminal will not be allocated because stdin is not a terminal.
-bash: line 1: $'SSH-2.0-OpenSSH_6.4\r': command not found

Будь-які ідеї?

Відповіді:


6

Команда, яка вам потрібна, - це ProxyCommand.

Ви повинні помістити у свій .ssh / config файл наступні рядки:

  Host userver
  HostName userver.example.com
  .........    

  Host workstation 
  ProxyCommand ssh -q userver nc -q0 workstation 22

Тепер ви можете підключитися до робочої станції ПК за допомогою

  ssh worksation

Якщо це не зрозуміло, або ви хочете отримати більше деталей, пропоную прочитати це чудове вступ до ssh multi-hopping.

Редагувати:

ви завжди можете визначити псевдонім: у файлі /home/your_name/.bashrc додайте цей рядок:

  alias ssh_workstation='ssh -A -t userver ssh -A -X workstation' 

(Я вставив -Xопцію, щоб ви могли запускати графічні програми на віддаленому сервері, бачити їх локально; якщо цього не хочете, просто опустіть -X).


Привіт MariusMatutiae, я спробував ваше рішення, але, як я вже говорив у початковій публікації, у вузла 'userver' бракує програми netcat (nc). Отже, я отримую цю помилку: ssh workstation bash: nc: команда не знайдена ssh_exchange_identification: З'єднання закрите віддаленим хостом
labotsirc

Ви не можете встановити його?
MariusMatutiae

На жаль, ні, у мене немає суперпользователя на "userver", тому я намагався альтернативний метод. Я не розумію, якщо це працює "ssh -A -t userver ssh -A workstation", чому те саме, що ставиться на ProxyCommand, не робить?
labotsirc

1
@labotsirc Я трохи змінив свою відповідь. Сподіваюся, вам це стане в нагоді. Крім того, ви можете спробувати встановити netcat локально (тобто лише для вас!), Додавши у рядок Proxycommand .... повний шлях до власної копії netcat. Я не впевнений, що це працює через дозволи, але ви можете спробувати.
MariusMatutiae

Скопіював мій бітковий файл netcat, видалив параметр -q0, оскільки він давав помилки, і тепер він працює! Спасибі
labotsirc

10

Я знайшов таке рішення, що працює набагато краще, ніж використання netcat ( nc), як в іншому прикладі. З мережевою мережею зв'язок був дуже повільним і неодноразово зависав, поки я не натисну деякі клавіші. Також вам не потрібно встановлювати netcat.

Додайте до свого ~/.ssh/config:

Host *
  ServerAliveCountMax 4
  ServerAliveInterval 15

Host workstation
  Hostname workstation
  User userworkstation
  ProxyCommand ssh userserver@userver -W %h:%p

Тоді ви можете ssh так:

ssh workstation

Також зауважте, що причина вашого ProxyCommandне працює в тому, що ви не отримуєте те, що ProxyCommandробить. ProxyCommandповинні створити трубу, по якій sshможна зробити з'єднання SSL. Іншими словами, команда повинна запустити процес підключення stdin та stdoutssh до sshdпорту. У своїй конфігурації ви встановлюєте ssh-з'єднання, ProxyCommandяке підключається sshдо командної оболонки, а не до sshdпорту.

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