Я добавил это в свой ~/.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
Таким образом, хотя вы не можете предотвратить установление сеанса, вы получите большое красное предупреждение.