9

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

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

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

Есть идеи?

2 ответа2

9

Я обнаружил, что следующее решение работает намного лучше, чем использование 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 портом.

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).

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .