最近由于项目原因需要登录合作方机器进行操作,ssh命令格式 ssh -p {port} {username}@{host}.
执行了命令之后发现 处于hang住的状态,但是同事机器都可以登录。排除掉网络问题、私钥的问题和ssh 配置问题之后只好tcpdump抓包分析。
经过抓包分析发现 当使用域名做为ssh的目标地址时,ssh会自动丢弃掉部分端口的包,但使用ip访问就没有这个问题。任意使用一个域名都可以复现这个问题。例如:
ssh -p 22 xx@www.baidu.com(可以发出包)
ssh -p 80 xx@www.baidu.com(可以发出包)
ssh -p 37000 xx@www.baidu.com (不会发出包)
ssh -p 22 xx@180.101.49.12(可以发出包)
ssh -p 37000 xx@180.101.49.12(可以发出包)
猜想是某个安全配置,当开启的时候ssh会对域名情况下的端口做校验,丢弃掉未知端口的包(不会发到网卡上)。但是搜了很久也没有搜到这个参数。也可能是新版mac的ssh做了定制?这个以后有空再继续深挖。