在自动化运维中,SSH有几个参数非常重要:
ssh -o ConnectTimeout=2 -o ConnectionAttempts=5 -o PasswordAuthentication=no -o StrictHostKeyChecking=no $ip -p$port "command"
1 ConnectTimeout=2 连接时超时时间,2秒
2 ConnectionAttempts=5 连接失败后重试次数,5次
3 PasswordAuthentication=no 是否使用密码认证,(在遇到没做信任关系时非常有用,不然会卡在那里)
4 StrictHostKeyChecking=no 第一次登陆服务器时自动拉取key文件,(跟上面一样,并且在第一次ssh登陆时,自动应答yes)
事情的起因是现场集群出现问题,发现最终是因为有个c程序需要system()运行一个脚本,而脚本里面有ssh连接到一台异常服务器,导致ssh卡死5个多小时,从而导致调用system()的线程堵死5个多小时。通过上述的ssh超时参数就可以控制ssh卡死问题,保证各种情况下ssh都是不会卡死的。
不少脚本都有自动跳过卡死的要求,特别是自动化运维脚本不能卡死,否则一处卡死,就会导致很严重的运维事故。