更加安全和簡單的方式通過堡壘機ssh

理想情況下的運維肉迫,是不需要ops去ssh到服務(wù)器上檢查問題(包括安全問題)/日志等符衔,這些是可以通過更好
監(jiān)控,如使用newrelic,或者更好的日志收集系統(tǒng)刃麸,如splunk等去避免失暴。不過現(xiàn)實不總是完美的邀层,加上歷史遺留的原因异赫,ops總是會ssh到堡壘機(bastion host)椅挣,然后跳轉(zhuǎn)到目標服務(wù)器去做操作。

于是塔拳,就有很多人(包括我)在堡壘機上生成key/pair, 而且private key很少加密(包括我)鼠证,這個存在很嚴重的安全風(fēng)險。

一個比較合理的方式是通過ssh proxy的方式去訪問目標服務(wù)器靠抑,這樣不需要把key暴露給bastion量九,比如:

 ~> ssh -L 3333:destination_host:22 user@bastion

然后再啟動一個新的ssh進程去通過proxy連接:

 ~> ssh -p 3333 user@0

每次這么操作略麻煩,可以通過在ssh配置文件簡化:

Host bastion  
        HostName 192.168.1.1  
        HostKeyAlias bastion  
        LocalForward 9999 target:22  

那么建立proxy就只是ssh user@bastion就可以了颂碧,然后同理去ssh -p 9999 user@0荠列。
這么做的壞處在于~/.ssh/config配置可能會迅速膨脹,同時载城,每次還是啟動兩個進程去完成這件事情肌似,不開心。

于是诉瓦,我們的安全大神介紹一個更加簡單的方法川队,在~/.ssh/config中,加入下面的內(nèi)容:

Host */*   
        ProxyCommand ssh $(dirname %h) -W $(basename %h):%

如此我就可以通過ssh user@bastion/target的方式直接ssh到遠程主機睬澡,ProxyCommand指令會
生成兩個進程固额,后臺proxy進程,前臺的進程直接通過proxy連接到目標主機煞聪。這樣從命令行窗口看來我只
是打開了一個會話斗躏。同時,你可以鏈接很多個主機米绕,如ssh user@bastion/targetA/targetB/targetC瑟捣。
依次通過前一個主機建立的proxy連接到后面的主機上。

這個方法有一些局限:

  1. 不能在主機鏈上指定不同的端口栅干;
  2. 不能對不同的主機使用不同的登錄用戶名迈套;
  3. 不同鏈上建立的連接不能重用已經(jīng)建立的連接,這可能會導(dǎo)致連接的速度減緩碱鳞;
  4. 其實還有個問題就是不能很容易的從targetC退出到 targetB…… (我想的)

為了解決這些問題桑李,大神想出了終極解決方案:

Host */*  
    ControlMaster auto  
    ControlPath   ~/.ssh/.sessions/%r@%h:%p  
    ProxyCommand /bin/sh -c 'mkdir -p -m700 ~/.ssh/.sessions/"%r@$(dirname %h)" && exec ssh -o "ControlMaster auto" -o "ControlPath   ~/.ssh/.sessions/%r@$(dirname %h):%p" -o "ControlPersist 120s" -l %r -p %p $(dirname %h) -W $(basename %h):%p'
  1. Host */*: 匹配ssh到A/B/X這樣的主機類型,然后遞歸的ssh到鏈中的主機;
  2. ControlMaster auto: 這個指令的意思是指ssh應(yīng)當復(fù)用已有的control channel連接遠程主
    機贵白,如果這樣的channel不存在率拒,則重新創(chuàng)建,以便以后的鏈接復(fù)用禁荒;
  3. ControlPath ~/.ssh/.sessions/%r@%h:%p: 這個指令告訴ssh control channel socket
    文件的位置猬膨。對于每個遠程主機,socket文件應(yīng)該是唯一的呛伴,如此我們可以重用已有連接并且跳過驗證勃痴。所
    以我們用%r(remote login name),%h(remote host name)和%p(端口)作為文件名的部分。
    唯一的問題是因為路徑中的/热康,這里會在%h被當成一個目錄沛申,但是ssh不會自動創(chuàng)建目錄;
  4. ProxyCommand blah: 命令開始時就先創(chuàng)建了所有必須的目錄姐军。 ControlPersist的意思是如果
    control channel 2分鐘內(nèi)沒有活動則停止ssh進程铁材。如果你有兩個會話bastion/HostA
    bastion/HostB,如果不配置ControlPersist奕锌,結(jié)束第一個進程時第二進程也會同時被干掉著觉。

所以,當你用上面的配置去ssh user@bastion/A/B/C時:

  1. ssh 匹配到了*/*模式
  2. ssh 嘗試重用~/.ssh/.sessions/user@bastion/A/B/C:22的socket惊暴,如果成功則建立連接固惯,
    沒有則繼續(xù)執(zhí)行
  3. ssh執(zhí)行ProxyCommand中的內(nèi)容, 創(chuàng)建目錄同時遞歸的ssh到最終的主機C
  4. 然后ssh在主機C上進行身份驗證缴守,成功則創(chuàng)建~/.ssh/.sessions/user@bastion/A/B/C:22
    control channel socket文件葬毫,并且成為control channel的master
  5. 顯示命令行提示符

你現(xiàn)在有沒有和我一樣暈,在和大神交流一番后屡穗,大神告訴我一個改進版的配置:

Host */*  
        ControlMaster auto  
        ProxyCommand    /usr/bin/ssh -o "ControlMaster auto" -o "ControlPath ~/.ssh/.sessions/%%C" -o "ControlPersist 120s" -l %r -p %p $(dirname %h) -W $(basename %h):%p

Host *
        ControlPath     ~/.ssh/.sessions/%C

這個配置要簡單些贴捡,不過他假設(shè)你已經(jīng)創(chuàng)建了~/.ssh/.sessions目錄。

榮耀歸于Dmitry大神村砂,雖然那個ssh keypair我還沒有刪除……烂斋。
原文

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市础废,隨后出現(xiàn)的幾起案子汛骂,更是在濱河造成了極大的恐慌,老刑警劉巖评腺,帶你破解...
    沈念sama閱讀 206,482評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件帘瞭,死亡現(xiàn)場離奇詭異,居然都是意外死亡蒿讥,警方通過查閱死者的電腦和手機蝶念,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,377評論 2 382
  • 文/潘曉璐 我一進店門抛腕,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人媒殉,你說我怎么就攤上這事担敌。” “怎么了廷蓉?”我有些...
    開封第一講書人閱讀 152,762評論 0 342
  • 文/不壞的土叔 我叫張陵全封,是天一觀的道長。 經(jīng)常有香客問我桃犬,道長售貌,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,273評論 1 279
  • 正文 為了忘掉前任疫萤,我火速辦了婚禮,結(jié)果婚禮上敢伸,老公的妹妹穿的比我還像新娘扯饶。我一直安慰自己,他們只是感情好池颈,可當我...
    茶點故事閱讀 64,289評論 5 373
  • 文/花漫 我一把揭開白布尾序。 她就那樣靜靜地躺著,像睡著了一般躯砰。 火紅的嫁衣襯著肌膚如雪每币。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,046評論 1 285
  • 那天琢歇,我揣著相機與錄音兰怠,去河邊找鬼。 笑死李茫,一個胖子當著我的面吹牛揭保,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播魄宏,決...
    沈念sama閱讀 38,351評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼秸侣,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了宠互?” 一聲冷哼從身側(cè)響起味榛,我...
    開封第一講書人閱讀 36,988評論 0 259
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎予跌,沒想到半個月后搏色,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,476評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡券册,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,948評論 2 324
  • 正文 我和宋清朗相戀三年继榆,在試婚紗的時候發(fā)現(xiàn)自己被綠了巾表。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,064評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡略吨,死狀恐怖集币,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情翠忠,我是刑警寧澤鞠苟,帶...
    沈念sama閱讀 33,712評論 4 323
  • 正文 年R本政府宣布,位于F島的核電站秽之,受9級特大地震影響当娱,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜考榨,卻給世界環(huán)境...
    茶點故事閱讀 39,261評論 3 307
  • 文/蒙蒙 一跨细、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧河质,春花似錦冀惭、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,264評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至乐尊,卻和暖如春戚丸,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背扔嵌。 一陣腳步聲響...
    開封第一講書人閱讀 31,486評論 1 262
  • 我被黑心中介騙來泰國打工限府, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人痢缎。 一個月前我還...
    沈念sama閱讀 45,511評論 2 354
  • 正文 我出身青樓谣殊,卻偏偏與公主長得像,于是被迫代替她去往敵國和親牺弄。 傳聞我的和親對象是個殘疾皇子姻几,可洞房花燭夜當晚...
    茶點故事閱讀 42,802評論 2 345

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

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn)势告,斷路器蛇捌,智...
    卡卡羅2017閱讀 134,599評論 18 139
  • 從三月份找實習(xí)到現(xiàn)在,面了一些公司咱台,掛了不少络拌,但最終還是拿到小米、百度回溺、阿里春贸、京東混萝、新浪、CVTE萍恕、樂視家的研發(fā)崗...
    時芥藍閱讀 42,184評論 11 349
  • 更多精彩文章https://deepzz.comDesc:SSH 相關(guān)的使用技巧逸嘀,用 .ssh/config 簡化...
    deepzz閱讀 1,526評論 0 0
  • 暮色四合崭倘,每周例會剛結(jié)束,大家熙攘著離開會議室类垫。我和搭檔留下來整理會議室后司光,跟學(xué)習(xí)部的學(xué)姐打了聲招呼,準備回寢室打...
    四個月閱讀 909評論 0 2
  • 也許生命就是不斷失去的旅程,同樣的事情發(fā)生多了售躁,肯定就是自己的原因坞淮。 人生還是要學(xué)會控制和管理自己的情感。
    青瀾閱讀 237評論 0 1