SSH 跳转和本地命令

SSH 跳转和本地命令

我添加了这个来~/.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 跳转是否不兼容?是否有文档记录?是否有方法使其工作(例如在“跳转”时禁用本地命令),或者我是否遇到了错误?

答案1

正如ssh_config手册页所述:

该命令同步运行,无法访问生成它的 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

这样,虽然您无法阻止会话建立,但您会收到一个大红色警告。

相关内容