使用 Teleport 管理服務(wù)器集群

服務(wù)器多了答姥,管理也是個(gè)麻煩莫鸭,主流的集群運(yùn)維工具——Ansible潦匈、Puppet阱高、Saltstatck都是非常出色的工具。不過今天的主角是一個(gè)新秀——Teleport茬缩,這是一個(gè)使用Go語言編寫的赤惊,高效的現(xiàn)代SSH管理工具。

源碼:Teleport

Teleport 是一款可以替代 SSH 工具的新一代服務(wù)器集群管理工具凰锡,它不僅可以同時(shí)管理大量服務(wù)器還可以作為一個(gè)終端錄制工具未舟,它提供了一個(gè)直觀的 Web 界面來顯示終端,也就是說你可以在瀏覽器操作服務(wù)器掂为,在瀏覽器錄制裕膀、分享。它是開源的勇哗,它運(yùn)行在你的服務(wù)器上昼扛。

0. 準(zhǔn)備步驟

  • 一臺(tái)服務(wù)器
  • 一個(gè)域名
  • 一個(gè)SSL證書

服務(wù)器自己買,域名自己挑欲诺。證書申請(qǐng):

  1. 克隆倉庫:
    首先你得安裝git抄谐,然后把源碼倉庫拉回到服務(wù)器本地。
$ git clone https://github.com/certbot/certbot.git
  1. 申請(qǐng)證書:
    接下來扰法,你需要關(guān)閉所有占用80和443端口的服務(wù)蛹含,比如Nginx、Apache等塞颁。然后執(zhí)行下面命令浦箱,大概會(huì)等一會(huì)吸耿。
$ ./certbot-auto certonly -d shell.zuolan.me

然后會(huì)問你:

How would you like to authenticate with the ACME CA?
# -------------------------------------------------------------------------------
1: Place files in webroot directory (webroot)
2: Spin up a temporary webserver (standalone)
# -------------------------------------------------------------------------------
Select the appropriate number [1-2] then [enter] (press 'c' to cancel): 

如果你確保你的80和443端口沒有被占用,那么選擇第二種方式(簡(jiǎn)單)酷窥,否則選擇第一種咽安,然后按照它的提示操作(祝你好運(yùn))。

如果你已經(jīng)申請(qǐng)過證書會(huì)有這種提示(沒有就算了):

What would you like to do?
# -------------------------------------------------------------------------------
1: Keep the existing certificate for now
2: Renew & replace the cert (limit ~5 per 7 days)
# -------------------------------------------------------------------------------
Select the appropriate number [1-2] then [enter] (press 'c' to cancel): 

選擇E竖幔,回車板乙,搞定是偷。

1. 安裝Teleport

從下面地址中下載最新版本的 Teleport:
https://github.com/gravitational/teleport/releases
解壓之后就可以用了拳氢,你也可以使用它的安裝腳本安裝到系統(tǒng)相關(guān) bin 目錄,方便直接使用 Teleport 命令蛋铆。

Teleport 一共有三個(gè)小工具馋评,使用過程比較復(fù)雜,有機(jī)會(huì)單獨(dú)寫一篇文章介紹都可以刺啦。

直接啟動(dòng)即可:

$ sudo teleport start
[AUTH]  Auth service is starting on 0.0.0.0:3025
[PROXY] Reverse tunnel service is starting on 0.0.0.0:3024
[PROXY] Web proxy service is starting on 0.0.0.0:3080
[SSH]   Service is starting on 0.0.0.0:3022
[PROXY] SSH proxy service is starting on 0.0.0.0:3023

現(xiàn)在再運(yùn)行一個(gè) Nginx 前端負(fù)載留特,用于反代后端的Teleport,怎么作自己百度玛瘸,畢竟每個(gè)人使用Nginx習(xí)慣都不一樣蜕青,我直接貼配置意義不大(但我還是要貼上來)。

server {
    listen 443 ssl http2;
    listen [::]:443 ssl http2;
    server_name shell.zuolan.me;
    server_tokens off;
    location /generate_204 { return 204; }

    # ssl on;
    ################
    # SSL 配置
    ################
    ssl_certificate /etc/nginx/certs/fullchain.pem;
    ssl_certificate_key /etc/nginx/certs/privkey.pem;
    ################
    # from https://cipherli.st/
    # and https://raymii.org/s/tutorials/Strong_SSL_Security_On_nginx.html
    ################
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
    ssl_prefer_server_ciphers on;
    # ssl_ciphers "EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH";
    ssl_ciphers "EECDH+CHACHA20:EECDH+CHACHA20-draft:EECDH+AES128:RSA+AES128:EECDH+AES256:RSA+AES256:EECDH+3DES:RSA+3DES:!MD5:!MEDIUM:!LOW";
    ssl_ecdh_curve secp384r1;
    ssl_session_cache shared:SSL:10m;
    ssl_session_tickets off;
    ssl_stapling on;
    ssl_stapling_verify on;
    resolver 8.8.8.8 8.8.4.4 valid=300s;
    resolver_timeout 5s;
    # Disable preloading HSTS for now.  You can use the commented out header line that includes
    # the "preload" directive if you understand the implications.
    # add_header Strict-Transport-Security "max-age=63072000; includeSubDomains; preload";
    # add_header Strict-Transport-Security "max-age=63072000; includeSubdomains";
    add_header X-Frame-Options DENY;
    add_header X-Content-Type-Options nosniff;

    ssl_dhparam /etc/nginx/certs/dhparam.pem;
    ################
    # SSL END
    ################
    add_header 'Access-Control-Allow-Origin' *;
    add_header 'Access-Control-Allow-Methods' 'GET,POST,OPTIONS';
    location / {
        client_max_body_size 50M;
        proxy_pass http://172.16.168.200:3080;
        proxy_redirect off;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_set_header X-Frame-Options SAMEORIGIN;
    } 
}

打開shell.zuolan.me就可以訪問到UI界面了糊渊。

這個(gè)工具提供的 Web 界面是強(qiáng)制使用 HTTPS 訪問的右核,使用 HTTP 將無法打開網(wǎng)頁,此外它還使用了谷歌二步驗(yàn)證(離線工具渺绒,不用翻墻)作為登錄驗(yàn)證贺喝,因此你需要手機(jī)安裝谷歌二步驗(yàn)證應(yīng)用

留個(gè)鏈接給不會(huì)翻墻的小白:酷安

雖然使用麻煩宗兼,但是安全而且界面優(yōu)雅躏鱼。

如果你沒有域名,也可以打開 Web 界面殷绍,輸入 https://<你的IP地址>:3080 開頭的地址會(huì)看到下面的界面:

直接使用 https 方式打開

點(diǎn)擊繼續(xù)前往就可以看到登錄界面染苛,如果你要建立私密連接,你必須購買一個(gè)域名和申請(qǐng)SSL證書主到。

打開之后二步驗(yàn)證工具掃描二維碼茶行,輸入驗(yàn)證碼就可以登錄了。

登錄之后

現(xiàn)在看到的是服務(wù)器列表镰烧,因?yàn)槭且粋€(gè)集群管理工具拢军,所以你可以添加很多服務(wù)器進(jìn)來怔鳖。

點(diǎn)擊其中一臺(tái)服務(wù)器,會(huì)直接連接到那臺(tái)服務(wù)器(在這個(gè)工具中所有的操作都會(huì)被記錄下來,你可以回放你的操作):

連接狀態(tài)

Teleport 處理特殊符號(hào)效果不是很好的感覺艾凯,建議使用終端的tsh連接,網(wǎng)頁這個(gè)只做為備選登錄方式懂傀。

退出就結(jié)束本次會(huì)話趾诗,結(jié)束錄制蹬蚁,你可以在界面中查看之前的錄制內(nèi)容:


錄制結(jié)果

2. 創(chuàng)建一個(gè)用戶

這里的用戶是指Teleport的用戶。

> tctl users add $USER

Signup token has been created. Share this URL with the user:
https://shell.zuolan.me/web/newuser/96c85ed60b47ad345525f03e1524ac95d78d94ffd2d0fb3c683ff9d6221747c2

在瀏覽器打開返回的鏈接犀斋,輸入密碼完成新用戶注冊(cè)贝乎。

3. 添加節(jié)點(diǎn)

> tctl nodes add

The invite token: n92bb958ce97f761da978d08c35c54a5c
Run this on the new node to join the cluster:
teleport start --roles=node --token=n92bb958ce97f761da978d08c35c54a5c --auth-server=shell.zuolan.me

在你的節(jié)點(diǎn)服務(wù)器執(zhí)行:

teleport start --roles=node --token=n92bb958ce97f761da978d08c35c54a5c --auth-server=shell.zuolan.me

查看節(jié)點(diǎn)(在管理節(jié)點(diǎn)執(zhí)行):

> tsh --proxy=shell.zuolan.me ls

Node Name     Node ID                     Address            Labels
---------     -------                     -------            ------
localhost     xxxxx-xxxx-xxxx-xxxxxxx     10.0.10.1:3022     
new-node      xxxxx-xxxx-xxxx-xxxxxxx     10.0.10.2:3022     

修改節(jié)點(diǎn)信息(在節(jié)點(diǎn)服務(wù)器執(zhí)行):

teleport start --roles=node \
    --auth-server=shell.zuolan.me \
    --nodename=db \
    --labels "location=virginia,arch=[1h:/bin/uname -m]"

4. 登錄

登錄到某個(gè)服務(wù)器

tsh --proxy=shell.zuolan.me ssh new-node

分享操作會(huì)話:

> tsh --proxy=teleport.example.com ssh db
db > teleport status

User ID    : joe, logged in as joe from 10.0.10.1 43026 3022
Session ID : 7645d523-60cb-436d-b732-99c5df14b7c4
Session URL: https://teleport.example.com:3080/web/sessions/7645d523-60cb-436d-b732-99c5df14b7c4

別人加入當(dāng)前會(huì)話(簡(jiǎn)單來說就是圍觀你的操作):

> tsh --proxy=teleport.example.com join 7645d523-60cb-436d-b732-99c5df14b7c4

5. 本地分享

如果你是在一個(gè)需要認(rèn)證網(wǎng)絡(luò)的內(nèi)網(wǎng),申請(qǐng)SSL什么的不太方便览效。
自己電腦啟動(dòng),指定服務(wù)器角色:

> teleport start --roles=node --proxy=teleport.example.com

然后繼續(xù)在自己電腦執(zhí)行:

> tsh --proxy=teleport.example.com ssh localhost
localhost> teleport status

和上面一樣你會(huì)得到一個(gè)會(huì)話ID丁稀,把它分享給別人,然后你就可以在本地共享終端操作了但校。

這個(gè)辦法可以用于分享一堆服務(wù)器每强,并且記錄用戶的操作。管理起來很方便~

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末空执,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子奶栖,更是在濱河造成了極大的恐慌门坷,老刑警劉巖,帶你破解...
    沈念sama閱讀 212,816評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件冻晤,死亡現(xiàn)場(chǎng)離奇詭異绸吸,居然都是意外死亡设江,警方通過查閱死者的電腦和手機(jī)攘轩,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,729評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門度帮,熙熙樓的掌柜王于貴愁眉苦臉地迎上來歼捏,“玉大人笨篷,你說我怎么就攤上這事〖庞眨” “怎么了安聘?”我有些...
    開封第一講書人閱讀 158,300評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵瓢棒,是天一觀的道長。 經(jīng)常有香客問我念颈,道長连霉,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,780評(píng)論 1 285
  • 正文 為了忘掉前任窟感,我火速辦了婚禮歉井,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘哩至。我一直安慰自己,他們只是感情好卢佣,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,890評(píng)論 6 385
  • 文/花漫 我一把揭開白布箭阶。 她就那樣靜靜地躺著晚缩,像睡著了一般媳危。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上鸣皂,一...
    開封第一講書人閱讀 50,084評(píng)論 1 291
  • 那天暮蹂,我揣著相機(jī)與錄音,去河邊找鬼荆陆。 笑死集侯,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的棠枉。 我是一名探鬼主播,決...
    沈念sama閱讀 39,151評(píng)論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼命浴,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼贱除!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起碍讯,我...
    開封第一講書人閱讀 37,912評(píng)論 0 268
  • 序言:老撾萬榮一對(duì)情侶失蹤飞醉,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后轴术,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體钦无,經(jīng)...
    沈念sama閱讀 44,355評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,666評(píng)論 2 327
  • 正文 我和宋清朗相戀三年彼宠,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片拙已。...
    茶點(diǎn)故事閱讀 38,809評(píng)論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡摧冀,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出建车,到底是詐尸還是另有隱情椒惨,我是刑警寧澤,帶...
    沈念sama閱讀 34,504評(píng)論 4 334
  • 正文 年R本政府宣布康谆,位于F島的核電站,受9級(jí)特大地震影響戒突,放射性物質(zhì)發(fā)生泄漏描睦。R本人自食惡果不足惜导而,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,150評(píng)論 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望韵丑。 院中可真熱鬧虚缎,春花似錦、人聲如沸实牡。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,882評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽题涨。三九已至总滩,卻和暖如春巡雨,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背铐望。 一陣腳步聲響...
    開封第一講書人閱讀 32,121評(píng)論 1 267
  • 我被黑心中介騙來泰國打工蝌以, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人跟畅。 一個(gè)月前我還...
    沈念sama閱讀 46,628評(píng)論 2 362
  • 正文 我出身青樓,卻偏偏與公主長得像奸攻,于是被迫代替她去往敵國和親虱痕。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,724評(píng)論 2 351

推薦閱讀更多精彩內(nèi)容

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理硝训,服務(wù)發(fā)現(xiàn)新思,斷路器,智...
    卡卡羅2017閱讀 134,638評(píng)論 18 139
  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 171,867評(píng)論 25 707
  • 點(diǎn)擊查看原文 Web SDK 開發(fā)手冊(cè) SDK 概述 網(wǎng)易云信 SDK 為 Web 應(yīng)用提供一個(gè)完善的 IM 系統(tǒng)...
    layjoy閱讀 13,712評(píng)論 0 15
  • 1.監(jiān)聽整個(gè)下拉區(qū)域的touchstart事件,并記錄下pageY和clientY值 2.監(jiān)聽整個(gè)區(qū)域的touch...
    e40c669177be閱讀 2,369評(píng)論 1 2
  • 一個(gè)堆棧類 LinkList本身已經(jīng)具備了創(chuàng)建堆棧所必需的方法荸哟,而Stack本身可以通過兩個(gè)泛型類Stack<T>...
    呆呆李宇杰閱讀 239評(píng)論 0 0