当前位置:首页 > 休闲

进服务器

凌晨两点十七分,进服务器我盯着终端里那行红色的进服务器 `Connection refused`,手指在键盘上悬了半分钟。进服务器这已经是进服务器今晚第四次被挡在门外了。服务器就在那儿,进服务器IP 能 ping 通,进服务器端口也开着,进服务器但 SSH 就是进服务器连不上。这种感觉像极了去朋友家串门,进服务器明明看见客厅灯亮着,进服务器敲门却没人应。进服务器

进服务器这件事,进服务器说穿了就是进服务器一场握手谈判。客户端敲敲门,进服务器说“我想进来”,进服务器服务器得回应“你是谁,你凭什么”。双方对不上暗号,门就永远关着。我第一次被卡住是因为密钥权限设成了 644,SSH 直接拒绝使用——它要求私钥文件必须是 600,除了你自己,谁都不能读。一个数字之差,折腾了我整个下午。

后来我学乖了,每次新建实例先把防火墙规则过一遍。云服务商的安全组、系统自带的 iptables、firewalld,三层关卡叠在一起,漏掉任何一层都白搭。有次帮同事排查,他在安全组里开了 22 端口,但 iptables 里有一条默认 DROP 规则,所有入站包全被吃掉。tcpdump 抓包看到 SYN 包进来,没一个 SYN-ACK 出去。问题不在外面,在里面。

密码登录现在基本被淘汰了。暴力破解脚本一天能试几十万次,弱密码撑不过半小时。我见过一台暴露在公网的机器,日志里全是来自全球各地的尝试记录,用户名从 root 到 admin 到 oracle,字典跑得比我想象的勤快。密钥认证加 fail2ban,算是底线配置。再讲究一点,改默认端口、禁 root 直连、上跳板机,一层层往里缩。

但真正让人头疼的不是这些常规操作。有次一台生产机突然连不上,ping 通,端口通,密钥也对,就是卡在认证阶段。折腾了四十分钟才想起来,前一天改了 /etc/ssh/sshd_config 里的 AllowUsers,把自己加进去了,但忘了 reload 配置。sshd 还在用旧的规则跑,新写的白名单根本没生效。重启服务,秒进。这种坑踩一次能记一辈子。

还有 DNS 的问题。内网机器用主机名互连,某天解析突然变慢,SSH 连接要等十几秒才弹出密码提示。原因是 sshd 默认会反查客户端 IP 的主机名,DNS 服务器响应超时,它就干等。在 sshd_config 里加一行 UseDNS no,世界立刻安静了。这种参数平时没人注意,出事了才翻文档。

我现在养成一个习惯,每次进不去服务器,先分三层看:网络层能不能到,传输层端口通不通,应用层认证过不过。一层层剥,比瞎猜快得多。最怕的是那种时好时坏的情况,今天能连,明天不行,后天又好了。大概率是网络抖动或者对端负载太高,sshd 来不及响应。这种问题没有根治办法,只能加监控、设重试、做冗余。

说到底,进服务器不是按个按钮那么简单。它是一条链子,任何一环断了,你都只能对着黑屏发呆。而那条链子上挂着的,往往是某个你根本没注意过的配置项,或者某个你以为永远不会变的默认值。

分享到: