1. 程式人生 > >阿里雲:記一次窮途末路的重灌(CentOs)

阿里雲:記一次窮途末路的重灌(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 [email protected]_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

相關推薦

阿里窮途末路CentOs

1. 問題的產生前一陣子,用ssh 連線伺服器突然出現了問題,連不上還報錯,但是阿里雲官方提供的連線工具是可以連上的。在網上查找了一下解決方案得知可能是因為少了一個叫做sshd 的使用者,據說這個使用者的作用是用來進行許可權分割的。於是我就去伺服器的/etc/passwd 裡

邊鋒客戶端C++實習生面試

第一篇部落格,也是第一次寫部落格,就記一次準備的不是很充分的面試吧。 總體來說應該不算難,還是挺簡單的。 到那邊後先填一張資訊表,然後hr會過來讓你做一套試卷,選擇題和簡答題。大概包括引用、運算子過載、模板類的靜態變數、建構函式等相關,選擇題比較基礎。簡答題包括lambd

HTTP請求例項筆記

閒來無事,分析一下頁面發一次請求需要經過哪些類; 首先直接從過濾器開始說,ApplicationFilterChain,這個過濾器是tomacat下面的; 走過這個過濾器之後,就到了我們最核心的DispacherServlet這個排程器了; 到了DispacherS

資料採集軟體伺服器開發經歷c#,socket,TCP)

這次經歷大致分為以下幾個階段:一、C#基本操作學習和簡單TCP通訊實現    先前有使用MFC的經歷,因此對於C#的控制元件使用比較容易上手,每次使用之前可通過網路查詢到控制元件使用方法,直接拖拽就OK,唯一不適應的就是C#全部都是類,不過習慣後會覺得比C++更方便呼叫。TC

2018第一發【Advanced Installer】打包之旅

4.0 config文件 cli 簡單 官網 class 用法 process file 一、前言 2017年最後幾天,你們都高高興興的跨年,博主還在加班制作.net安裝包。因為年前要出來第一版的安裝包,所以博主是加班加點啊。本來想用VS自帶的制作工具,不過用過的人都知道

Yii2尷尬的bug

警告 use 一次 .com eight TP ger 怎麽 ted 創建一個文章模塊,寫完添加動作之後,分配到視圖,發現報錯: Exception (Not Supported) ‘yii\base\NotSupportedException‘ with messag

解決Bug之路記憶體溢位問題的查詢

JVM記憶體溢位的問題定位一直是個比較棘手的問題,日常開發專案中出現了記憶體溢位的情況,針對這種情況,本次通過分析dump檔案,快速定位問題,實錘Bug的源頭 步驟: 1、檢視日誌檔案 伺服器記憶體溢位報警,通過檢視日誌,初步懷疑查詢的資料過多,造成記憶體溢位。

Linux異常斷電導致的系統無法正常啟動檔案系統故障

因下班時間已到,著急關機!將虛擬機器中的Linux 6.5 x64系統直接關閉電源,重啟後無法正常啟動OS。 1、重啟後現象如下(提示/dev/sda3檔案系統不一致狀態) 2、輸入root密碼後,

從SQL注入到Getshell禪道系統的滲透

https://zhuanlan.zhihu.com/p/34275981?utm_source=qq&utm_medium=social此過程為某站點的滲透記錄,過程一波三折,但歸根結底都是粗心大意造成的,不過自我認為在這個排坑的過程中也學習到了很多。確認版本首先可

阿里伺服器上Spring Boot工程的簡單部署

我最近在阿里雲上釋出一個網站,沒有配置Jenkins環境,所以釋出我都用手動的方式去完成。 這裡我是在本機打好了jar包,然後將Spring Boot的jar包通過scp傳送到伺服器,確保專案中配置的

誤刪除系列三有道筆記資料恢復過程

1. 環境: 三個有道雲筆記客戶端分別是windows7、iphone、MAC   2. 事件發生過程: 今天早上在win7的有道雲筆記下記錄一些筆記時,出現誤刪除操作,當時我使用的是它的markdown模組進行記錄操作,剛好一個文件記錄了我一週一些學習過程的筆記,就在某一個時刻敲鍵盤時,

python爬蟲——前所未有的經歷爬取魔方格作文

前言 我還是第一次遇到魔方格這麼處理請求的網站,這裡記錄一下   過程 1、爬取物件:http://zuowen.mofangge.com/html/zwDetail/20161023/u111424965.html 需要抓取中間作文格里的作文  

分散式專案小結2017-2018

2017年公司業務系統升級,5-7月進行需求整理,8月至2018年4月開發上線,專案共計工作量1568工作日,專案需處理的資料規模千萬級起,採用分散式,微服務架構,資料庫採用MySql(原始為Sql Server),專案成員包括開發,前端,產品共計17人。 專案技術上屬於從

SSM專案小結

記一次SSM專案小結(一) ssm框架  環境配置  伺服器配置  解決方法  攔截器重定向到localhost nginx和tomcat中session失效 mybatis的xml檔案不生效 資料庫使用者建

折騰之旅兼 Classias 安裝教程

最近看一篇ACL論文,作者原始碼裡面用到了一個停止維護多年的庫,叫做Classias。 這個庫有一個特點,就是安裝都能失敗。 以下是安裝教程,如果你按照官方教程安裝,那麼,恭喜你,只會一直裝不上,裝上了也用不了。 1、安裝libLBFGS(因為Classias需要這個庫)

JVM調優Permanent Generation

最近在一次搭建公司系統執行環境的時候tomcat總是報出 java.lang.OutOfMemoryError PermGen space 的問題,即記憶體溢位 在解決這個問題的時候 一.問題解決 此處用到一個命令:jmap 顯示java堆中的詳

第一成功的逆向ctf

       之前比賽的時候有一道逆向題苦思冥想沒寫出來,可能是因為知識儲存過於少,之前只懂一些od的用法以及組合語言。以至於這次遇到加殼的題用od加載出來之後手足無措,之後看了別人的wp之後總結出一點思路。        首先用peid查殼之後發現是nSPack 3.7,

阿里專有網路ESC伺服器 實現 公網IP域名訪問伺服器內容

今天給一個空白的ESC阿里雲伺服器配置php+apache+mysql環境,在環境配置完成後,竟然發現用公有IP訪問不到伺服器,(顯示伺服器沒有響應)。所以在各種查詢資料,各種埋頭苦幹下,終於讓我找到為什麼“專有網路公有網路不能訪問伺服器“的原因:安全組不僅僅要設定入方向,你

.Net Core in Docker - 使用阿里Codepipeline及阿里容器映象服務實現持續交付/部署CD

上一次演示瞭如何使用阿里雲Codepipeline,阿里雲容器映象服務實現CI,講到這裡我們push一下程式碼後就自動編譯、自動跑單元測試、自動構建映象、自動推送映象到私倉。那麼離我們最初設定的目標只差那麼一小步了,那就是自動部署到測試/生產環境,這一步就是持續交付/部署(CD)。 CD其實是兩個意思 (1)

阿里盤擴容遇到的坑

背景 生產環境使用了阿里雲並且以mongo作為圖片伺服器,由於業務發展需要資料盤的400G的容量已經用到81%,所以需要對磁碟做無損擴容操作。 操作步驟 在控制檯上擴容資料盤的磁碟空間 官方文件:https://help.aliyun.com/document_detail/25452.html?s