自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

SSH::Batch,在公有云中使用 ssh 工具箱

云計(jì)算
企業(yè)上云還不是把內(nèi)部應(yīng)用換個(gè)地方部署那么簡單,對企業(yè)的技術(shù)水平還是很有挑戰(zhàn)的。上云不保證系統(tǒng)質(zhì)量會因此變好,穩(wěn)定性因此而提高,甚至因?yàn)榛A(chǔ)設(shè)施變化太大,本來部署在小型機(jī)上的現(xiàn)在只能部署在虛擬機(jī)上而導(dǎo)致應(yīng)用幾乎殘廢也不是沒有。

人吶就都不知道,自己就不可以預(yù)料。一個(gè)人的命運(yùn)啊,當(dāng)然要靠自我奮斗,但是也要考慮到歷史的行程,我絕對不知道,我作為一個(gè)服務(wù)端開發(fā)者怎么開始研究運(yùn)維去了,所以 ECS 醬同我講話,說「大家都決定了,你來負(fù)責(zé)運(yùn)維」,我說另請高明吧。我實(shí)在我也不是謙虛,我一個(gè)服務(wù)端開發(fā)者怎么就搞運(yùn)維了呢?但是呢,ECS 醬講「大家已經(jīng)研究決定了」,所以后來我就念了兩首詩,叫「茍利集群生死以,豈因禍福避趨之」,所以我就開始運(yùn)維。

就像之前的博文中講的那樣,我買了兩臺阿里云的 ECS,一臺在香港,一臺在新加坡。由于總所周知的網(wǎng)絡(luò)原因,從大陸 ping 這兩臺服務(wù)器的 RTT 一直都在兩三百毫秒,之前只有一臺位于香港的 ECS 的時(shí)候,我 ssh 上去部署一些服務(wù),碰上網(wǎng)絡(luò)抖動的時(shí)候都能卡出翔,敲擊一個(gè)按鍵之后許久才出現(xiàn)在屏幕上。

如今我有了兩臺服務(wù)器,如果還像之前那樣直接用 ssh 去維護(hù)的話,簡直就是不敢想象的事情。且不說一樣的配置文件我要修改兩遍,僅僅想象一下剛剛在 A 機(jī)器卡成翔的情況下完成維護(hù),又要去 B 機(jī)器上再次被卡成翔,就會讓我懷疑人生。不要問為什么卡成翔了還不用mosh,我也不知道😂

其實(shí)說起來,雖然過去一年多,我做的是服務(wù)端開發(fā),但是也涉足一些簡單的運(yùn)維工作。應(yīng)用服務(wù)器從我剛?cè)肼殨r(shí)候的幾臺擴(kuò)容到幾十臺到現(xiàn)在的一百多臺,一次又一次的自主發(fā)布,偶爾的手動批量重啟、下線服務(wù)器,捕獲線程快照、內(nèi)存快照、大批量處理應(yīng)用日志,經(jīng)歷過虛擬機(jī)宕機(jī)、物理機(jī)宕機(jī),不勝枚舉……當(dāng) AppOps 的日子,其實(shí)就是不那么規(guī)范的 DevOps 的日子。

集團(tuán)的對內(nèi)運(yùn)維水平還處在 IaaS 的時(shí)代,這也給了我們開發(fā)者接觸運(yùn)維的機(jī)會。如果哪天對內(nèi)的運(yùn)維達(dá)到了 PaaS 的級別,開發(fā)者們也許就接觸不到這些東西了。PaaS 似乎有點(diǎn)遙遠(yuǎn),目前來說比較現(xiàn)實(shí)的是 CaaS,Containers-as-a-Service,要是能做到這個(gè),開發(fā)者估計(jì)也沒啥機(jī)會接觸運(yùn)維了。

在工作中,當(dāng)我需要批量地在集群中執(zhí)行命令時(shí),我會使用一個(gè)叫 pgm 的內(nèi)部腳本。這個(gè)腳本是 Python 寫的,基于 pssh,用起來很不錯(cuò),能夠并發(fā)地在集群中執(zhí)行命令。這個(gè)命令應(yīng)該是我到目前為止會用的唯一一個(gè)內(nèi)部腳本,其他的像開源的 tsar 反而不會用。

 

SSH::Batch,在公有云中使用 ssh 工具箱

離開了公司的環(huán)境,我就沒有 pgm 用了。昨天我嘗試尋找一個(gè)能夠在集群中批量執(zhí)行 ssh 命令的工具,這樣我能夠比較輕松地管理我的 ECS 們。那時(shí)候我還不知道 pgm 是基于 pssh 實(shí)現(xiàn)的。隨便 Google 了一下 「ssh batch」,就找到一個(gè) Github repo,agentzh/sshbatch。

進(jìn)去看了一下 README,這是一個(gè)用 Perl 實(shí)現(xiàn)的工具箱,4 個(gè)命令分別實(shí)現(xiàn)如下功能:

  1. fornodes 計(jì)算機(jī)器列表
  2. atnodes 在指定機(jī)器集上執(zhí)行命令
  3. tonodes 把文件或目錄上傳到指定機(jī)器集
  4. key2nodes 把公鑰上傳到指定機(jī)器集

看起來很厲害的樣子,不過 agentzh 是誰?點(diǎn)開主頁一看,我當(dāng)時(shí)就跪了,有眼不識泰山,這不是傳說中的春哥「章亦春」么!幾個(gè)月前孤陋寡聞的我是不知道春哥的存在的,直到我出差去北京參加 Velocity,在大會上見識了王院生對的 OpenResty 的簡介[1],當(dāng)時(shí)就驚為天人。后來通過各種渠道加深了對 Nginx 和 OpenResty 的學(xué)習(xí)和了解,更是對春哥頂禮膜拜。

sshbatch 的文檔寫的很詳細(xì),從安裝到使用面面俱到,因此我這里就不再贅述,雖然文檔用英文寫的。

這里主要介紹一下 sshbatch 中讓我感覺驚艷的地方

首先是機(jī)器列表的管理方式。之前用 pgm 的時(shí)候,一個(gè)應(yīng)用分組的機(jī)器放在一個(gè)文件里面,在執(zhí)行批處理的時(shí)候指定存放機(jī)器列表的文件。fornodes 則是把機(jī)器列表看做是一個(gè)個(gè)的集合,集合與集合之間可以做交并補(bǔ)等運(yùn)算,通過集合運(yùn)算得到不同的機(jī)器列表。這靈活性簡直不能更贊。

其次是批量推送文件的 tonodes。之前用 pgm 只能批量執(zhí)行命令,我在內(nèi)網(wǎng)一直沒有找到科學(xué)的批量向服務(wù)器推送文件的腳本。tonodes 很好地滿足了我的需求。

于是我用 tonodes 和 atnodes 把我兩臺 ECS 上的 Nginx 配置文件重新維護(hù)了一遍,之前是直接登錄服務(wù)器修改的,如今變成本地使用一個(gè) git repo 去維護(hù)這些配置文件,修改完成后批量推送并重啟 Nginx。

事情并沒有想象中的一帆風(fēng)順。

由于服務(wù)器位于公有云,出于安全考慮,我禁止了 root 登錄,禁止了密碼登錄,只允許公鑰登錄。于是我沒法直接把 nginx.conf 放到 /etc/nginx/ 中。因?yàn)槲覒?,不想在啟?nginx 的時(shí)候指定配置文件,于是只好把 nginx.conf 放到 /tmp/,然后再把它移動到 /etc/nginx/ 并重啟。

  1. tonodes ./nginx/nginx.conf '{ecs}:/tmp/' 
  2. atnodes 'sudo mv /tmp/nginx.conf /etc/nginx/ && sudo nginx -t && sudo service nginx restart' '{ecs}' -w 

根據(jù)文檔中的描述,atnodes 加了 -w 參數(shù),會要求用戶輸入密碼,作為登錄密碼和 sudo 密碼。抱著試一試的心態(tài)執(zhí)行了一下,果然跪了。

  1. ➜  sshbatch git:(master) ✗ atnodes 'sudo mv /tmp/nginx.conf /etc/nginx/ && sudo nginx -t && sudo service nginx restart' '{ecs}' -w 
  2. Password: 
  3. Permission denied (publickey). 
  4. ===================== server ip ===================== 
  5. ERROR: unable to establish master SSH connection: bad password or master process exited unexpectedly 

唉,我都把密碼登錄禁用了,這里還強(qiáng)行要密碼登錄,不跪才怪了。從文檔中發(fā)現(xiàn)似乎把 -w 替換為 -tty 也可以實(shí)現(xiàn)遠(yuǎn)程執(zhí)行 sudo 命令,趕緊試試。結(jié)果發(fā)現(xiàn),用了 tty 倒是能輸入密碼執(zhí)行 sudo 了,但是,每臺機(jī)器都得輸入一次密碼,這是什么鬼!

目前我只有兩臺機(jī)器,輸密碼就忍了,假如哪天我有 10 臺機(jī)器了,光輸密碼就得累死。

其實(shí)這個(gè)問題在企業(yè)環(huán)境甚至私有云環(huán)境應(yīng)該都不是問題。哪個(gè)運(yùn)維會閑著蛋疼把服務(wù)器禁止密碼登錄啊!反正機(jī)器都在局域網(wǎng),IP 不暴露在公網(wǎng)就是相對安全的,只要守護(hù)好邊界出口就好。所以說在內(nèi)網(wǎng)批量執(zhí)行 sudo 命令的時(shí)候,直接用 -w 參數(shù)就好了。

問題來了,就要解決問題。最直接暴力的方案是,把我的賬號設(shè)置為 sudo 免密碼模式,很黃很暴力,我并不喜歡。第二種方法,就是修改 atnodes,支持 -w 參數(shù)輸入的密碼僅作為 sudo 密碼,不作為登錄密碼。

于是我 fork 了代碼,拉到本地做了些修改。雖然是完全沒用過的 Perl,但還是分分鐘就改好了~通過增加參數(shù) -W 來表達(dá)「passowrd for sudo only」的含義。

隨便執(zhí)行一個(gè) sudo 命令看看效果。

  1. ➜  sshbatch git:(master) ✗ atnodes 'sudo ls' '{ecs}' -W 
  2. Password: 
  3. ===================== server ip ===================== 
  4. sudo: no tty present and no askpass program specified 
  5. Remote command returns status code 1. 

居然,出錯(cuò)了……根據(jù)報(bào)錯(cuò)信息,給之前的命令追加一個(gè) -tty 參數(shù),于是我終于能在服務(wù)器上使用 sudo 了!不幸的是,開啟 tty 之后,批處理就沒法并發(fā)執(zhí)行了,只能按順序一個(gè)一個(gè)來。不過想想也是,開啟 tty 之后一般是要做一些交互操作的,而標(biāo)準(zhǔn)輸入流就只有一個(gè),所以只好一個(gè)一個(gè)來了。

  1. ➜  sshbatch git:(master) ✗ atnodes 'sudo ls /etc/nginx/sites-enabled/' '{ecs}' -W -tty -q 
  2. Password: 
  3. ===================== server ip ===================== 
  4. [sudo] password for admin: 
  5. blog.jamespan.me  blog.xuminzheng.com  default  hatta  wekan 
  6.  
  7. ===================== server ip ===================== 
  8. [sudo] password for admin: 
  9. blog.jamespan.me  default 

我把我的修改補(bǔ)充測試之后提交了 PR,希望能被春哥接收😇經(jīng)過春哥一番悉心教導(dǎo),經(jīng)歷 7 次修改,終于被合并到了主干~

然后我又嘗試了一下 pssh,似乎它沒法很好地應(yīng)對類似于我的機(jī)器這種禁止密碼登陸之后還要執(zhí)行 sudo 命令的場景。所以說啊,企業(yè)上云還不是把內(nèi)部應(yīng)用換個(gè)地方部署那么簡單,對企業(yè)的技術(shù)水平還是很有挑戰(zhàn)的。上云不保證系統(tǒng)質(zhì)量會因此變好,穩(wěn)定性因此而提高,甚至因?yàn)榛A(chǔ)設(shè)施變化太大,本來部署在小型機(jī)上的現(xiàn)在只能部署在虛擬機(jī)上而導(dǎo)致應(yīng)用幾乎殘廢也不是沒有。

最后的最后,今天我發(fā)現(xiàn)了一個(gè)叫 Ansible 的運(yùn)維工具,感覺有點(diǎn)強(qiáng)大,而且對系統(tǒng)毫無入侵,正在看文檔學(xué)習(xí)中。

Update:

春哥 Review 代碼后,我按照他的意見把 -so 修改成了 -W。

原文鏈接:http://blog.jamespan.me/2015/11/07/ops-with-ssh-batch/?hmsr=toutiao.io&utm_medium=toutiao.io&utm_source=toutiao.io

責(zé)任編輯:Ophira 來源: James Pan's Blog
相關(guān)推薦

2010-01-25 14:04:17

Android Wid

2009-10-10 13:09:45

2009-12-14 14:00:39

VS 關(guān)系圖

2017-02-14 10:17:08

軟件咨詢師工具箱

2010-01-04 18:11:44

Silverlight

2021-01-18 08:10:35

安全工具病毒

2011-08-22 10:40:07

SSH命令SSH命令

2020-09-20 10:12:54

nccm

2010-07-23 08:48:21

PHP架構(gòu)

2013-01-28 10:47:14

Windows 8

2013-06-07 13:30:20

2013-08-13 14:42:28

2019-10-29 16:30:10

FedoraSSH端口Linux

2015-05-27 14:26:05

2012-04-23 13:53:26

帶寬QoS

2018-10-19 09:30:57

SSHSFTPLinux

2009-12-18 09:27:04

VS 2008 工具箱

2017-06-07 11:57:26

混合云OpenStack容器

2019-04-08 08:50:02

2015-08-04 15:21:17

SDN公有云軟件定義網(wǎng)絡(luò)
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號