7

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

ssh -f -N -D 9000 user@host.com

... который возвращает меня обратно в командную строку после открытия соединения. Затем я могу использовать что-то вроде прокси-цепочки для запуска команд через host.com .

Мой вопрос: как я могу подключиться / взаимодействовать с тем же сеансом, чтобы получить удаленную оболочку на host.com? Теперь я делаю это, открывая еще один ssh-сеанс с простым ssh user@host.com , но я думаю, что должен быть способ просто использовать тот первый сеанс, который я открыл.

2 ответа2

11

Если он не был создан с включенным мультиплексом, вы не сможете.

В следующий раз запустите фоновую сессию так:

ssh -f -N -M -S ~/.ssh/S.user@host.com -D 9000 user@host.com

Здесь -M включает режим мультиплексного мастера, а -S устанавливает путь к сокету.

Теперь вы можете использовать ssh -S ~/.ssh/S.user@host.com dummyhost чтобы открыть второй сеанс по тому же соединению. Можно управлять мастером, задав -O exit , -O check и различные другие опции. (К сожалению, -O forward это очень недавнее дополнение.)

Чтобы сделать это автоматически, вы можете использовать следующие параметры в .ssh/config:

Host *
    ControlPath ~/.ssh/S.%l.%r@%h:%p
    ControlMaster auto
    ControlPersist 10m

Установка ControlPath означает, что вам не нужно каждый раз указывать -S .

Настройка ControlMaster auto означает, что каждое новое соединение будет автоматически продолжаться в фоновом режиме в качестве мастера мультиплекса. (Без него вы все еще можете запускать новые мастера с ssh -fNM host).

Настройка ControlPersist 10m означает, что автоматические мастера будут работать в течение 10 минут, когда у них нет активных сессий. (Это недавно добавленная опция.)

Обратите внимание, что пакетная передача по мультиплексному соединению приведет к очень медленным интерактивным сеансам ...

0

Не указывайте параметры -f (фоновый SSH) и -N (не выполнять удаленную команду), поэтому используйте

ssh -D 9000 user@host.com

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