遠(yuǎn)程工作流簡(jiǎn)介

遠(yuǎn)程工作的需求無非兩個(gè):

  1. 遠(yuǎn)程執(zhí)行命令殴玛。
  2. 在遠(yuǎn)程與本地之間進(jìn)行文件的雙向傳輸亡嫌。

所有的遠(yuǎn)程工作流都需要考慮如何提高這兩個(gè)操作的效率砂缩。

1. 一般遠(yuǎn)程工作流

對(duì)于一般的遠(yuǎn)程機(jī)器胁出,我們可以通過 ssh 進(jìn)行連接和操作沟启,并使用 scp 命令或 SFTP 客戶端實(shí)現(xiàn)雙向文件交換:

# 登錄開發(fā)機(jī)
ssh dest_host

# 上傳文件
scp path/to/local_file dest_host:path/to/remote_file

# 下載文件
scp dest_host:path/to/remote_file path/to/local_file

有很多可視化的 SFTP 工具能夠代替 scp 命令完成文件雙向傳輸忆家,非常方便,例如 WinSCP德迹、Xmanager 等弦赖。

主流的文本編輯器也都提供了對(duì) SFTP 的插件支持,例如:

  • Sublime Text: SFTP浦辨。
  • VSCode: sftp蹬竖。

可以很方便地上傳、下載流酬、刪除币厕、編輯遠(yuǎn)程文件。

2. 中繼機(jī)下的遠(yuǎn)程工作流

考慮到安全原因芽腾,公司常常會(huì)對(duì)遠(yuǎn)程開發(fā)機(jī)的入口做限制旦装,想要連接開發(fā)機(jī)必須以一個(gè)中繼機(jī)器作為中介。這時(shí)候我們需要兩次 ssh 連接:首先連接到中繼機(jī)摊滔,然后從中繼機(jī)連接到開發(fā)機(jī)阴绢。

# 登錄到中繼機(jī)
ssh relay_host

# 現(xiàn)在我們已經(jīng)在中繼機(jī)上…
# 登錄開發(fā)機(jī)
ssh dest_host

中繼機(jī)的存在除了造成登錄更復(fù)雜之外,也使得文件傳輸更難實(shí)現(xiàn)艰躺,因?yàn)榻^大多數(shù) SFTP 工具都沒有中繼功能呻袭,在這種情況下無法使用。

按照傳統(tǒng)的方案腺兴,我們需要兩次 scp 命令來完成一次文件上傳操作:首先從本地上傳到中繼機(jī)左电,然后從中繼機(jī)上傳到開發(fā)機(jī)。但是這種方式顯然太復(fù)雜了,而且大部分中繼機(jī)對(duì)安全的要求非陈ㄗ悖苛刻段誊,只允許使用 ssh 命令,導(dǎo)致 scp 方式失效栈拖。

此時(shí)我們有以下三種方案來實(shí)現(xiàn)文件傳輸功能:

2.1 SSH 隧道

為了避免重復(fù)性的中繼命令连舍,我們可以借助 ssh 提供的“隧道”功能。該功能可以透過任意數(shù)量的中繼機(jī)涩哟,在本地機(jī)器與目標(biāo)機(jī)器之間建立一條“隧道”索赏。因此,文件的上傳染簇、下載依然可以通過本地機(jī)器上的一條命令完成参滴。

同時(shí),SSH 隧道有一個(gè)巨大的好處:所有的 SFTP 工具依然可用锻弓,因?yàn)樗淼缹?duì)外部是透明的砾赔。

關(guān)于隧道功能,可以查看 ssh 幫助手冊(cè)中的 -ProxyJump青灼、-ProxyCommand暴心、-R-L 等參數(shù)的用法杂拨。

不過使用該方案有兩個(gè)前提:

  1. ssh 版本必須足夠新专普,以支持隧道功能(OpenSSH 7.3 +)。
  2. 中繼機(jī)必須允許 TCP 轉(zhuǎn)發(fā)弹沽。

但不幸的是檀夹,很多中繼機(jī)對(duì)安全的要求非常苛刻策橘,不允許 TCP 轉(zhuǎn)發(fā)炸渡。在這種情況下,該方案無法工作丽已。

2.2 szrz 工具

szrz 是一個(gè)輕量蚌堵、便捷的解決方案,其內(nèi)部采用的 ZModem 協(xié)議非常底層沛婴,對(duì)中繼機(jī)是透明的吼畏。因此 szrz 是中繼機(jī)環(huán)境下文件傳輸問題的天然解決方案。

szrz 容易使用嘁灯,配置完成后泻蚊,在開發(fā)機(jī)的控制臺(tái)中使用 sz 命令下載文件,rz 命令上傳文件旁仿,同樣可以透過任意數(shù)量的中繼機(jī)藕夫。

但 szrz 有兩個(gè)嚴(yán)重弊端:

  1. 不支持大文件傳輸(超過 30MB 的文件就會(huì)把控制臺(tái)卡死)孽糖。
  2. 喪失了 SSH 協(xié)議的一切好處枯冈,比如安全性毅贮、豐富的 SFTP 工具等。

2.3 不使用 SSH尘奏,而是借助 FTP滩褥、HTTP 等其他協(xié)議

既然 SSH 協(xié)議被中繼機(jī)限制了,那我們不如另立門戶炫加,借助 FTP瑰煎、HTTP 等其他協(xié)議來實(shí)現(xiàn)文件傳輸∷仔ⅲ考慮到 FTP 天然適合靜態(tài)文件服務(wù)酒甸,比 HTTP 高效很多,所以我們一般選擇搭建 FTP 服務(wù)赋铝。

FTP插勤、HTTP 服務(wù)器是非常成熟、穩(wěn)定的技術(shù)革骨,基本上隨意挑選一款工具都可以滿足我們的需求农尖。我們以 pyftpdlib 為例:

  • 在開發(fā)機(jī)上安裝 FTP 工具:
pip install pyftpdlib
  • 啟動(dòng) FTP 服務(wù)
python -m pyftpdlib # and many other options ...

我們實(shí)際在用的啟動(dòng)命令:

# 考慮安全因素,可設(shè)置用戶名和密碼
python -m pyftpdlib --directory /home/work/ --port 8888 -r 8000-9000 --user username --password ****** --write

FTP 服務(wù)非常穩(wěn)定良哲,極少出錯(cuò)盛卡,因此你可以把上述命令放到后臺(tái)執(zhí)行,并且丟棄其日志:

nohup python -m pyftpdlib ...blahblah... >/dev/null 2>&1 &

開發(fā)機(jī)配置完成之后筑凫,我們就可以在本地進(jìn)行文件上傳滑沧、下載操作了:

# 下載文件
curl ftp://dest_host:8888/tmp/test.tar.gz -o test.tar.gz -u username:******

# 上傳文件
curl -T test.tar.gz ftp://dest_host:8888/tmp/test.tar.gz -u username:******

FTP 解決方案的優(yōu)勢(shì)如下:

  1. 支持大文件,并且傳輸速度是三種方案中最快的巍实。
  2. 天然支持可視化滓技,可直接把 ftp 地址輸入瀏覽器查看、下載文件蔫浆。
  3. 安全性:比 SSH 稍弱殖属,但考慮到開發(fā)機(jī)僅公司內(nèi)網(wǎng)可見,因此并不需要過度擔(dān)憂瓦盛。
  4. FTP 與 SFTP 一樣洗显,有著豐富的第三方工具可用。

3. 終極遠(yuǎn)程工作流:實(shí)現(xiàn)遠(yuǎn)程實(shí)時(shí)編輯

文件的上傳下載其實(shí)是個(gè)低頻需求原环,遠(yuǎn)程實(shí)時(shí)編輯開發(fā)機(jī)上的文件才是真正的痛點(diǎn)挠唆,這樣就實(shí)現(xiàn)了遠(yuǎn)程工作空間(remote workspace)。在這個(gè)需求上嘱吗,SSH 隧道和 FTP 解決方案更能充分提現(xiàn)其優(yōu)越性玄组。

目前主流的文本編輯器都支持 SFTP滔驾、FTP 等插件,比如:

這些插件可以在本地目錄和遠(yuǎn)程 SFTP/FTP 目錄之間建立映射患膛,從而實(shí)現(xiàn)遠(yuǎn)程實(shí)時(shí)編輯開發(fā)機(jī)上的代碼(以下圖片引自 Sublime Text SFTP):

Mapping a Folder to a Remote

當(dāng)然摊阀,你也可以不做實(shí)時(shí)映射,而是使用手動(dòng)方式同步本地和遠(yuǎn)程的代碼:

Editor Menu

在這種工作流下踪蹬,編輯遠(yuǎn)程機(jī)器上的代碼與編輯本地代碼沒有任何差別胞此。

相比如下兩種工作流:

  • 本地編輯代碼->上傳到開發(fā)機(jī)->發(fā)現(xiàn)問題->重復(fù)以上三步(或使用 vim 做簡(jiǎn)單修改)
  • 登錄開發(fā)機(jī)->使用 vim 編輯代碼(這種方式的弊端是不夠工程化,大代碼量難以管控)

remote workspace 工作流有著可視化編輯器的加成跃捣,在實(shí)踐中可以大大提高開發(fā)效率漱牵。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市疚漆,隨后出現(xiàn)的幾起案子酣胀,更是在濱河造成了極大的恐慌,老刑警劉巖愿卸,帶你破解...
    沈念sama閱讀 218,755評(píng)論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件灵临,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡趴荸,警方通過查閱死者的電腦和手機(jī)儒溉,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,305評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來发钝,“玉大人顿涣,你說我怎么就攤上這事≡秃溃” “怎么了涛碑?”我有些...
    開封第一講書人閱讀 165,138評(píng)論 0 355
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)孵淘。 經(jīng)常有香客問我蒲障,道長(zhǎng),這世上最難降的妖魔是什么瘫证? 我笑而不...
    開封第一講書人閱讀 58,791評(píng)論 1 295
  • 正文 為了忘掉前任揉阎,我火速辦了婚禮,結(jié)果婚禮上背捌,老公的妹妹穿的比我還像新娘毙籽。我一直安慰自己,他們只是感情好毡庆,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,794評(píng)論 6 392
  • 文/花漫 我一把揭開白布坑赡。 她就那樣靜靜地躺著烙如,像睡著了一般。 火紅的嫁衣襯著肌膚如雪毅否。 梳的紋絲不亂的頭發(fā)上亚铁,一...
    開封第一講書人閱讀 51,631評(píng)論 1 305
  • 那天,我揣著相機(jī)與錄音搀突,去河邊找鬼刀闷。 笑死熊泵,一個(gè)胖子當(dāng)著我的面吹牛仰迁,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播顽分,決...
    沈念sama閱讀 40,362評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼徐许,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了卒蘸?” 一聲冷哼從身側(cè)響起雌隅,我...
    開封第一講書人閱讀 39,264評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎缸沃,沒想到半個(gè)月后恰起,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,724評(píng)論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡趾牧,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,900評(píng)論 3 336
  • 正文 我和宋清朗相戀三年检盼,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片翘单。...
    茶點(diǎn)故事閱讀 40,040評(píng)論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡吨枉,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出哄芜,到底是詐尸還是另有隱情貌亭,我是刑警寧澤,帶...
    沈念sama閱讀 35,742評(píng)論 5 346
  • 正文 年R本政府宣布认臊,位于F島的核電站圃庭,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏失晴。R本人自食惡果不足惜剧腻,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,364評(píng)論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望师坎。 院中可真熱鬧恕酸,春花似錦、人聲如沸胯陋。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,944評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至义矛,卻和暖如春发笔,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背凉翻。 一陣腳步聲響...
    開封第一講書人閱讀 33,060評(píng)論 1 270
  • 我被黑心中介騙來泰國打工了讨, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人制轰。 一個(gè)月前我還...
    沈念sama閱讀 48,247評(píng)論 3 371
  • 正文 我出身青樓前计,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國和親垃杖。 傳聞我的和親對(duì)象是個(gè)殘疾皇子男杈,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,979評(píng)論 2 355

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