阿里云:记一次穷途末路的重装(CentOs)

1. 问题的产生

前一阵子,用ssh 连接服务器突然出现了问题,连不上还报错,但是阿里云官方提供的连接工具是可以连上的。在网上查找了一下解决方案得知可能是因为少了一个叫做sshd 的用户,据说这个用户的作用是用来进行权限分割的。于是我就去服务器的/etc/passwd 里面查看是否存在这个用户,看了一下,果然没有,但是存在另一个用户叫做_sshd。抱着试一试的态度将_sshd 改名为sshd 果然解决了ssh 无法连接的问题。但是,一切从此变得不正常起来……先是nginx 出了问题,无法接收到客户端的请求,之后向新的代码托管平台添加服务器公钥然后在服务器上进行git clone 操作时也出了问题。

为了解决莫名出现的一些bug 重启了一下服务器,结果重启之后发现所有的工具都连不上服务器了,包括用自己电脑的ssh 连接和阿里云自带的连接工具,而且没有任何错误提示!无奈之下只好求助于阿里云售后技术支持。

2. 求助于阿里云

按网上的说法进行了一系列的错误排查,填写问题描述,提交工单后很快就得到了反馈。跟阿里的技术人员沟通了几轮,保存了一下服务器的快照就让他放手去整。他整了一会告诉我说他们将服务器挂载到livecd 上以后发现/etc/passwd 和另一个文件中的内容被改的很乱,跟正常系统完全不一样(可是我只改了里面的一个用户名而已啊?!这难道就叫牵一发而动全身??),建议我重装系统。我问将正常系统的这两个文件拷贝过来直接替换掉我服务器上有问题的文件是否可行,他又捣鼓了一会告诉我替换了以后还是不行,于是我只能重装了。这个故事告诉我们系统配置文件一定不能随!便!改!!即使要改也要提前备份一下,以免改过之后出问题!!!

3. 重装吧

穷途末路,只能重装。以下为重装过程记录:

3.1 重新初始化磁盘

在重新初始化之前,记得先保存服务器快照,有助于之后进行数据恢复,这个过程可能要持续一个半到两个小时。


之后将服务器停止,这个过程可能要持续几分钟。


停止服务器之后,点击重新初始化磁盘,这个过程也要几分钟的时间。


此时,再使用阿里云的连接工具时发现已经能够连接到服务器了,但是之前安装的软件和所有的数据都已经丢失了。

3.2 修改host 的显示名称

登录服务器后,发现终端命令框前的主机名是一串很长的数字(服务器ID),可通过以下方式进行修改,修改后重启(直接在终端中输入reboot)才会生效。

vi /etc/sysconfig/network // 修改hostname 的值

3.3 创建新用户并授予sudo 权限

登录服务器后默认为root 用户,但是上面的故事告诉我们平时尽量不要用太高权限的用户进行操作,尤其是给别人使用的时候。所以这里创建一个新的用户供自己平时使用,并且授予sudo 权限。

// 创建用户
adduser myUser
// 修改密码
passwd myUser
// 更改/etc/sudoers 权限,使其可写,将新创建的用户写入其中
chmod -v u+w /etc/sudoers
// 修改文件内容
vi /etc/sudoers 

## Allow root to run any commands anywhere  
root    ALL=(ALL)       ALL  
myUser  ALL=(ALL)       ALL  #这个是新增的用户

// 修改结束后重新将/etc/sudoers 设置为不可写
chmod -v u-w /etc/sudoers

3.4 设置ssh 免密码登录

在上一步创建完新用户之后我们就可以使用这个用户登录了,但是一直在阿里云提供的连接工具里操作始终不太方便,所以还是想使用本地的shell 终端利用ssh 连接服务器进行操作。接下来要面临的问题就是设置ssh 免密码登录,因为我不想每次连接的时候都需要输一次密码。

设置ssh 免密码登录的操作流程可以描述为以下内容:将你使用ssh 连接服务器的电脑的公钥放在服务器用户目录下的.ssh 目录中的authorized_keys 文件(没有则新建)里。

到这里才发现,从重新初始化服务器到现在还没有在服务器上生成过公钥,因此服务器用户目录下是不存在.ssh 文件夹的,所以要先生成一下公钥。

ssh-keygen

生成公钥之后,服务器目录下便多了一个.ssh 文件夹,其中存放你的公钥和私钥信息。接着新建一个authorized_keys 文件并改变其操作权限使其可写。

// 服务器操作
touch ~/.ssh/authorized_keys
chmod 600 ~/.ssh/authorized_keys

然后利用scp 命令将你的电脑拷贝到服务器并写入刚刚创建的authorized_keys 文件中。

// 本地操作
scp ~/.ssh/id_rsa.pub myUser@server_ip:~/.ssh/user_pc.pub
// 服务器操作
cat ~/.ssh/user_pc.pub >> ~/.ssh/authorized_keys

此时,在本地使用ssh 连接服务器就可以不用输入密码了。

3.5 安装Apache

Apache在CentOs 7 中是Apache HTTP server,所以想安装Apache 其实是要安装httpd,于是又引出一个问题,我怎么知道我的CentOs 是什么版本?使用以下命令查看:

cat /etc/redhat-release

看了以后发现确实是CentOs 7,于是安装httpd

sudo yum install httpd

启动和关闭httpd 命令如下

systemctl start httpd.service
systemctl stop httpd.service

httpd 配置文件位置如下

vi /etc/httpd/conf/httpd.conf

此时访问你的服务器ip 可以看到一个apache 的测试网页,说明apache 启动成功了,或者使用以下命令查看80 端口是否已经在监听

netstat -nlp | grep 80

3.6 安装mysql

使用yum 安装mysql

sudo yum install mysql mysql-server mysql-devel

使用这个命令安装完以后发现不能使用mysql,启动mysql 也会报错。网上搜说是CentOs 7 版本将mysql 数据库软件从默认的程序列表中移除,用mariadb 代替了。所以需要安装mariadb

sudo yum install -y mariadb-server

然后启动

systemctl start mariadb.service
// 添加到开机启动
systemctl enable mariadb.service

操作完成后,就可以正常使用mysql 了。

3.7 安装nginx

使用yum 安装nginx

// 先添加EPEL 仓库
sudo yum install epel-release
// 安装
sudo yum install nginx
// 启动
sudo systemctl start nginx
// 开机启动
sudo systemctl enable nginx

启动的时候发现启动失败了,这才想起之前安装的httpd 是监听80 端口的,nginx 也要监听80 端口。端口冲突,所以启动失败,手动将httpd 配置改为8080 端口重新启动httpd,再次启动nginx 成功。

nginx 配置文件位置为/etc/nginx/nginx.conf,如果找不到的话使用以下命令查找

// 在 / 目录下查找名字为nginx.conf 的文件
find / -name nginx.conf

3.8 安装node

直接使用yum 安装后发现node 不是最新版本,所以需要进行升级

// 安装nodejs
sudo yum install nodejs 
// 安装cnpm 替代npm
sudo npm install -g cnpm --registry=https://registry.npm.taobao.org
// 安装node 版本管理工具
cnpm install -g n
// 升级nodejs 到稳定版
n stable


操作完之后使用node -v 查看nodejs 版本,若发现nodejs 的版本仍然没有更新,则需要配置环境变量

vi /etc/profile

// 在文件末尾添加以下内容
#set node path
export NODE_HOME=/usr/local/n/versions/node/10.4.1
export PATH=$NODE_HOME/bin:$PATH

关闭文件,命令行运行source /etc/profile


Ref:centos7下创建新用户并授权

Ref:Linux之ssh免密登录

Ref:如何在CentOS 7上安装Nginx

Ref:centos7 mysql数据库安装和配置

Ref:Centos7命令行下安装和配置Apache服务器

猜你喜欢

转载自blog.csdn.net/qq_33594380/article/details/80794193