作者:MeshCloud脉时云公有云架构师严大淇
引言
有时会出现误操作的情况,错误的修改了某个文件内容或权限,导致系统无法登陆。 例如:
- fstab挂载了一个不存在的磁盘
- 修改了防火墙规则限制了登陆
- /etc/security/access.conf 配置了一些规则限制登陆
- 误操作修改了/var/empty/sshd的权限
- /etc/ssh/sshd_config 内容不正确
- 关闭了sshd服务等
- selinux打开导致ssh登陆失败
- CPU,内存使用过高导致无法连接
在服务器无法ssh登陆,且没有镜像或快照备份的情况下,通过以下方法可以解决一些简单的服务器无法ssh连接的问题
场景一
服务器可以正常启动,包括但不限于防火墙规则问题,ssh服务问题,root用户限制问题,文件权限等
情况一
服务器开启了密码登陆,可以直接使用串口登陆解决
实施步骤
1,编辑实例,勾选启用连接到串行端口
2,通过穿行端口连接服务器
3,登陆后即可修改相关配置解决问题 例:sshd 配置文件权限问题
执行以下命令,查看报错原因。
sshd -t
若返回类似如下信息:
“/var/empty/sshd must be owned by root and not group or world-writable.”
执行以下命令,修改 /var/empty/sshd/ 文件权限。
chmod 711 /var/empty/sshd/
若返回类似如下信息:
“/etc/ssh/ssh_host_rsa_key are too open”
执行以下命令,修改 /etc/ssh/ssh_host_rsa_key文件权限
chmod 600 /etc/ssh/ssh_host_rsa_key
情况二
服务器未开启密码登陆,无法直接通过串行控制台连接
实施步骤
1,可以为实例添加启动脚本
2,针对上述问题,可以通过此脚本添加用户及密码
#! /bin/bash
adduser USERNAME
echo USERNAME:PASSWORD | chpasswd
usermod -aG google-sudoers USERNAME
3,使用新添加的用户通过串行控制台登陆,步骤见情况一
场景二
服务器无法正常启动,如/etc/fstab下挂载了一个不存在的磁盘,此时是无法通过串口登陆的。
思路:可以准备一台新的实例,把故障机的系统盘分离后,挂载到新的实例上,修改/etc/fstab文件
实施步骤
1,关机(故障机操作)
2,点击实例ID进入,点击编辑分离启动盘(故障机操作)
3,将故障机分离的启动盘添加到新实例上(新实例操作)
4,新实例挂载磁盘(新实例操作)
此时可以看到新实例具有两块盘
挂载sdb1到mnt目录下
mount /dev/sdb1 /mnt
5,进入/mnt/etc/fstab文件注释掉不存在的磁盘即可
6,修复完毕后,分离附加的系统盘(新实例操作)
7,分离后将磁盘重新添加到故障机(故障机操作)
提醒
风险无处不在,建议做好镜像或定期快照备份