ssh multi-hop… адаптирует команду к конфигурационному файлу ssh

10

Я пытаюсь поместить мою многопользовательскую команду ssh в файл ssh .ssh / config.

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

Я поместил открытые ключи SSH RSH в «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

Также другой файл конфигурации в userver (~ / .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

Любые идеи?

labotsirc
источник

Ответы:

6

Команда, в которой вы нуждаетесь, есть ProxyCommand.

Вы должны поместить в ваш файл .ssh / config эти строки:

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

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

Теперь вы можете подключиться к рабочей станции ПК с помощью

  ssh worksation

Если это не ясно, или вы хотите получить больше подробностей, я предлагаю вам прочитать это отличное введение в многопользовательский режим SSH.

Редактировать:

вы всегда можете определить псевдоним: в вашем /home/your_name/.bashrc файле добавьте эту строку:

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

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

MariusMatutiae
источник
Привет MariusMatutiae, я попробовал ваше решение, но, как я сказал в оригинальном посте, узлу 'userver' не хватает программы netcat (nc). Итак, я получаю эту ошибку: ssh рабочая станция bash: nc: команда не найдена ssh_exchange_identification: соединение закрыто удаленным хостом
labotsirc
Вы не можете установить его?
MariusMatutiae
К сожалению, нет, у меня нет суперпользователя на 'userver', поэтому я пробовал альтернативный метод. Я не понимаю, если это работает "ssh -A -t userver ssh -A рабочая станция", почему то же самое на ProxyCommand не работает?
labotsirc
1
@labotsirc Я немного исправил свой ответ. Надеюсь, вы найдете это полезным. В качестве альтернативы, вы можете попробовать установить netcat локально (т.е. только для вас!), Добавив в строке Proxycommand .... полный путь к вашей собственной копии netcat. Я не уверен, что это работает, из-за разрешений, но вы можете попробовать это.
MariusMatutiae
Скопировал мой двоичный файл netcat, удалил опцию -q0, потому что он выдавал ошибки, и теперь он работает! Спасибо
labotsirc
10

Я обнаружил, что следующее решение работает намного лучше, чем использование netcat ( nc), как в другом примере. С netcat мое соединение было очень медленным и постоянно зависало, пока я не нажал несколько клавиш. Также вам не нужно устанавливать 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 и stdout подключаются sshк sshdпорту. В вашей конфигурации вы создаете ssh-соединение, ProxyCommandкоторое подключается sshк командной оболочке, а не к sshdпорту.

jcoffland
источник