在Linux系统中部署远程登录服务时,单台服务器或单个网络地址往往成为运维链路中最脆弱的环节。一旦承载SSH或Telnet的机器停机、网卡故障或系统负载过高,管理员便会失去对整套环境的控制能力。高可用远程登录的本质,是通过冗余节点、共享虚拟IP以及健康检测机制,让客户端始终能通过同一个入口地址连入存活的节点,从而在物理机或虚拟机出现异常时实现无缝切换。

基于Keepalived的虚拟IP与故障转移设计
要实现高可用,第一步是为SSH和Telnet服务提供一个不依赖于具体物理主机的访问入口,这通常借助Keepalived配合VRRP协议来完成。Keepalived会在多个Linux节点间协商出一个虚拟IP(VIP),该地址由主节点持有;当主节点的守护进程检测到自身网络或服务不可用时,备节点会在秒级时间内接管VIP,客户端无需更改连接配置即可登录到新的活动节点。
在配置层面,我们需要在每个节点安装keepalived,并编写对应的配置文件来声明本机优先级、检测脚本以及虚拟路由ID。检测脚本一般用来周期性执行pgrep sshd或尝试本地端口连通性,若连续多次失败则降低节点权重触发切换。下面给出一个精简的Keepalived配置示例,其中通过vrrp_script检查SSH进程是否存在:
vrrp_script chk_ssh {
script "/usr/bin/pgrep sshd"
interval 2
weight -20
}
vrrp_instance VI_1 {
state MASTER
interface eth0
virtual_router_id 51
priority 150
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.0.100
}
track_script {
chk_ssh
}
}
上述配置中,主节点优先级为150,当SSH进程丢失时权重减少20,若备节点优先级更高便会赢得VIP。值得注意的是,Telnet服务因为明文风险不建议直接暴露到外部网络,但可以将其绑定在内网网卡,并在同一个Keepalived实例中增加对应的端口检测脚本,实现与SSH类似的冗余效果。通过这种虚拟IP架构,远程登录的高可用性在网络层就具备了基础保障。
SSH服务自身的冗余与证书互信实践
除了网络入口的冗余,SSH协议层面也要避免单点认证故障。传统密码登录不仅容易被暴力破解,而且在自动切换节点后还可能因host key变更触发客户端告警。更稳妥的做法是在所有节点间预先分发相同的主机密钥,或者采用统一的证书颁发机构签发用户证书,使得客户端无论连到哪一个后备节点都不会出现known_hosts冲突。
具体实施时,可以先将一台配置完善的机器的/etc/ssh/ssh_host_rsa_key等文件复制到其他节点,并保证权限正确;随后在客户端使用基于证书的登录,管理员用私有CA签发用户证书并限制可登录的principal。以下示例展示如何用ssh-keygen生成CA并签发证书:
# 生成证书颁发机构密钥 ssh-keygen -t rsa -b 4096 -f ca_key # 用CA签发用户证书,有效期7天 ssh-keygen -s ca_key -I user_alice -V +7d -n alice id_rsa.pub # 在目标节点信任该CA echo "@cert-authority * $(cat ca_key.pub)" >> /etc/ssh/ssh_known_hosts
对于Telnet而言,它不支持此类加密证书体系,因此只能在可信内网中配合防火墙白名单与登录超时断开策略来降低风险。如果业务确实要求Telnet高可用,建议在前端用xinetd或systemd socket激活模式部署多实例,并结合Linux虚拟服务器(LVS)做TCP层负载均衡。这样即使某台Telnet服务器重启,流量也会被转发至其他实例,用户只会感到短暂重连而非完全不可达。
系统级监控、防火墙与会话保持策略
高可用方案若缺少监控与边界控制,依然可能在切换瞬间被外部流量打垮或留下安全隐患。我们需要在Linux上通过firewalld或iptables限定SSH、Telnet的源地址范围,例如仅允许运维网段访问Telnet的23端口,而SSH的22端口可对VPN网段开放。与此同时,利用systemd的Restart指令确保sshd和telnetd在异常退出后自动拉起,减少人工介入。
会话保持方面,SSH本身提供TCPKeepAlive与ClientAliveInterval参数,可避免网络设备因空闲断开连接;对于Telnet,则可以在服务端配置timeout或借助tmux、screen让会话脱离终端独立运行。当Keepalived发生VIP漂移时,已建立的SSH连接会随旧节点失效而中断,但新连接会迅速落到备节点,配合证书互信用户可快速恢复工作。下例展示sshd_config中相关的保活设置:
TCPKeepAlive yes ClientAliveInterval 60 ClientAliveCountMax 3 PermitRootLogin no MaxSessions 20
最后,建议将整个远程登录集群纳入Prometheus或Zabbix监控,重点采集各节点的SSH登录成功率、Telnet响应延迟以及VIP当前归属。一旦主节点连续多次认证失败或CPU饱和,告警可驱动运维提前干预。综合运用虚拟IP、证书互信、服务自恢复与边界防护,Linux上的远程登录才能真正达到高可用标准,在硬件或系统故障面前依然为管理员保留可靠的操作通道。