Назад | Перейти на главную страницу

SSH Jump и локальная команда

Я добавил это в свой ~/.ssh/config чтобы избежать глупых ошибок:

Host *.prod-domain.com
    LocalCommand print "WARNING: PROD" && print "continue ?" && read
    PermitLocalCommand yes

Что делает ssh распечатать предупреждение и подсказку, когда я пытаюсь подключиться к хосту под prod-domain.com.

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

ssh -J gateway.prod-domain.com target.prod-domain.com

Но с включенной локальной командой ssh ​​не работает:

Bad packet length 1231976033.
ssh_dispatch_run_fatal: Connection to UNKNOWN port 65535: message authentication code incorrect

Прямое подключение (например, ssh gateway.prod-domain.com) по-прежнему работает нормально, а соединение с переходом работает, если я прокомментирую локальную команду.

Совместимы ли локальные команды и скачки ssh? Это где-то задокументировано, и есть ли способ заставить это работать (например, отключение локальной команды при "прыжках"), или я, возможно, обнаружил ошибку?

Как ssh_config manpage говорит:

Команда запускается синхронно и не имеет доступа к сеансу ssh (1), который ее породил. Его не следует использовать для интерактивных команд.

Ваша проблема с read оператор, он нарушает процесс согласования SSH, выполняемый в туннеле, созданном через gateway.prod-domain.com.

Вы можете настроить свой клиент таким образом, чтобы только "конечные точки" выдавали предупреждение, а шлюз - нет, если в вашем ~/.ssh/config для шлюза, вот так:

Host gateway.prod-domain.com gateway
    HostName gateway.prod-domain.com

Host *.prod-domain.com
    ProxyJump gateway
    LocalCommand print "WARNING: PROD" && print "continue ?" && read
    PermitLocalCommand yes

Таким образом, то, что вы пытались сделать, будет работать, только убедитесь, что не используете серверы «prod-domain» в качестве прокси-сервера (за исключением, конечно, шлюза). Или, чтобы полностью избежать интерактивных команд, вы можете использовать что-то вроде этого:

Host *.prod-domain.com
    LocalCommand echo -e "\x1b[30;41mWARNING: You are on a PRODUCTIVE system!\x1b0m"
    PermitLocalCommand yes

Таким образом, хотя вы не можете предотвратить установление сеанса, вы получите большое красное предупреждение.