我厂登陆服务器需要先走一个跳板机,不能直接登陆,很是蛋疼。实际上 ssh 早就解决了这个问题。
大意是通过设置 proxycommand 来实现,我也写过一个 http://wdicc.com/cow-ssh-proxycommand/ 。配置如下
# gateways Host abc Hostname abc.com # servers Host *.xxx ProxyCommand ssh abc exec nc %h %p 2>/dev/null
这样所有 .xxx 结尾的机器,都会使用 abc 这个机器来跳了。要注意的是,首先需要你机器和 abc 之间的 ssh 验证,这个使用使用的是你机器的 id_rsa 和 abc.com 的 authorized_keys。然后会是 proxy 起作用,需要你的机器和 .xxx 机器的验证,使用的是你的机器的 id_rsa 和 .xxx 的 authorized_keys,注意并不是 abc.com 和 .xxx 之间。
倒霉的是,我厂有些 gateway 机器还需要使用 token,并不能使用 key 验证。虽然有了上面设置,如果从某个机器 cp 数据的时候,还得来回输入哪个 token,真他妈的 2b。
还好 ssh 还提供了一个 controlmaster,很好的解决了这个问题。
Host * User dong.wang ServerAliveInterval 30 ControlMaster auto ControlPath /tmp/ssh/master-%r@%h:%p ControlPersist yes
上面这个设置是所有服务器启用 controlmaster,哪个 /tmp/ssh 目录可以自己设置,没有就创建一个。哪个 ControlPersist 可以是个时间。
这样设置之后,第一次连接的时候,会启动一个 master。后续连接都会走这个,连接速度很快不说,还完全不需要输入什么 token。并且因为只有 gateway 需要输入 token,所以一个 gateway 只需要输入一次。实在是爽大了,真是居家旅行必备啊。就冲着连接速度快这一点也值了。