Я хотел бы заставить вторичное ssh-соединение (я) использовать существующее соединение ControlMaster и потерпеть неудачу, если мастер отсутствует.

При ssh -o ControlPath=somewhere -o ControlMaster=no ... это новое соединение будет искать существующего мастера и, если оно не найдено, отступит к созданию своего собственного автономного соединения. Можем ли мы просто отключить запасной вариант?

Самое близкое, что я могу придумать, это

ssh -o ControlPath=somewhere -o ControlMaster=no -O check \
    && ssh -o ControlPath=somewhere -o ControlMaster=no

Я что-то пропустил?

Зачем?

Распространенный для меня случай, когда ssh требует некоторого взаимодействия с OTP или аппаратной штукой. Обычно я работаю с несколькими терминалами, каждый из которых работает, например while sleep 1; do ssh-and-reconnect-to-a-screen-session ; done

В моем идеальном мире было бы одно мастер-соединение (с проверкой OTP/ токена), тогда каждый другой терминал работал бы в цикле и отказывал до тех пор, пока не смог соединиться с управляющим мастером.

Так как это (в зависимости от ~ случайного порядка, что предыдущие подключения не выполняются и повторяются), открытие крышки ноутбука переносит меня сразу на несколько проверок OTP/ токенов, потому что каждая команда ssh хочет быть / новым хозяином.

(Опять же, в идеальном мире mosh мог бы решить проблему «где я остановился», но здесь это не вариант)-:

1 ответ1

1

Ваш вариант использования действительно конкретен. Я не думаю, что вы что-то упускаете.

Есть только несколько ключей командной строки -S и -M которые вы можете использовать, если вы не хотите помещать это в ~/.ssh/config:

ssh -S somewhere -O check host && ssh -S somewhere -M host

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