亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 服務器 > Web服務器 > 正文

在Docker容器中不需要運行sshd的原因淺析

2024-09-01 13:48:59
字體:
來源:轉載
供稿:網友

當開始使用Docker時,人們經常問:“我該如何進入容器?”,其他人會說“在你的容器里運行一個SSH服務器”。但是,從這篇博文中你將會了解到你根本不需要運行SSHd守護進程來進入你的容器。當然,除非你的容器就是一個SSH服務器。

運行SSH服務器是很想當然的,因為它提供了進入容器的簡便方式。在我們公司基本上每個人都最少使用過一次SSH。我們中有很大一部分人每天都會使用它,并且他們很熟悉公鑰與私鑰,無密碼登錄,密鑰代理,甚至有時會使用端口轉發和其他不常用的功能。正因如此,人們建議你在容器中運行SSH并不奇怪。但你應該仔細考慮下。

假設你正在假設一個Redis Server或Java Webservice的Docker鏡像, 我會問你以下幾個問題:

你需要用SSH來做什么? 一般來說, 你想做備份, 檢查日志, 或者重啟進程, 調整配置, 還有可能用gdb, strace或其他類似的工具來debug服務器。那我們會看一下我們怎么不使用SSH來做這些事情。

你怎么管理你的密鑰和密碼的?一般來說,你要么把它們寫到你的鏡像中,要么就把它們放在一個卷中。你想一下如果你要更新這些密鑰或密碼你會怎么做呢。如果你把它們寫到鏡像里了,你就需要重建鏡像,重新部署它們,然后重啟容器。這還好,不算是世界末日,但是這絕不是一個高大上的方法。把它們放到卷中,然后通過管理卷來管理它們倒是比前一種好得多。這種方法是可用的,可是卻有嚴重的缺陷。你必須要確認容器沒有這個卷的寫權限;否則,容器有可能會破壞密鑰(這讓你之后就進不去容器了),如果你再用一個卷共享給多個容器的話,情況會變得更糟。如果不用SSH,我們不就少一個需要擔心的事了嗎?

你如何管理安全升級呢?SSH服務器是挺安全的,但是仍然會有安全問題,你會在必要的時候不得不升級所有使用SSH的容器。這意味著大量的重建和重啟。也就是說,及時你有一個簡單小巧的memcached服務,你還是不得不確保及時的安全更新,否則千里之堤可能毀于蟻穴。所以還是這句話,如果不用SSH,我們不就少一個需要擔心的事了嗎?

你需要“僅安裝一個SSH服務器”來達到目的嗎?當然不。你需要加裝進程管理器,比如Monit或者Supervisor。這是因為Docker自己只會監視一個進程。如果你需要運行多個進程,你就必須在上面加裝一層可以看著他們的應用。換句話說,你在把簡單問題復雜化。如果你的應用停了(正常退出或者崩潰),你必須要從你的進程管理日志里面去查看,而不能簡單的查看Docker提供的信息。

你可以負責把應用放到容器中,但你是否應該同時負責管理訪問策略和安全限制呢?在小機構中,這都不是事。但是在大型機構中,如果你是負責設立應用容器的人,那很可能有另外一個人負責定義遠程訪問策略。你所在的公司很可能有嚴格的策略定義說明誰能訪問,如何訪問或者其他各種審查跟蹤的要求。那樣的話,你肯定不會被允許把一個SSH服務器扔進你的容器中。

但我該如何做…

備份我的數據?

你的數據應該存在于 volume中. 然后你可以使用--volumes-from選項來運行另一個容器,與第一個容器共享這個volume。這樣做的好處:如果你需要安裝新的工具(如s75pxd)來將你備份的數據長期保存,或將數據轉移到其他永久存儲時,你可以在這個特定的備份容器中進行,而不是在主服務容器中。這很簡潔。

檢查日志?

再次使用 volume! 如果你將所有日志寫入一個特定的目錄下,且這個目錄是一個volume的話,那你可以啟動另一個log inspection" 容器(使用--volumes-from,還記得么?)且在這里面做你需要做的事。如果你還需要特殊的工具(或只需要一個有意思的ack-grep),你可以在這個容器中安裝它們,這樣可以保持主容器的原始環境。

重啟service?

基本上所有service都可以通過信號來重啟。當你使用/etc/init.d/foo restart或service foo restart時,實際上它們都會給進程發送一個特定的信號。你可以使用docker kill -s <signal>來發送這個信號。一些service可能不會監聽這些信號,但可以在一個特定的socket上接受命令。如果是一個TCP socket,只需要通過網絡連接上就可以了。如果是一個UNIX套接字,你可以再次使用volume。將容器和service的控制套接字設置到一個特定的目錄中,且這個目錄是一個volume。然后啟動一個新的容器來訪問這個volume;這樣就可以使用UNIX套接字了。

“但這也太復雜了吧!”-其實不然。假設你名為foo的servcie 在/var/run/foo.sock創建了一個套接字,且需要你運行fooctl restart來完成重啟。只需要使用-v /var/run(或在Docker文件中添加VOLUME /var/run)來啟動這個service就可以了。當你想重啟的時候,使用--volumes-from選項并重載命令來啟動相同的鏡像。像這樣:

# Starting the service CID=$(docker run -d -v /var/run fooservice) # Restarting the service with a sidekick container docker run --volumes-from $CID fooservice fooctl restart 

很簡單吧!

修改我的配置文件

如果你正在執行一個持久的配置變更,你最好把他的改變放在image中,因為如果你又啟動一個container,那么服務還是使用的老的配置,你的配置變更將丟失。所以,沒有您的SSH訪問!“但是我需要在服務存活期間,改變我的配置;例如增加一個新的虛擬站點!”這種情況下,你需要使用……等待……volume!配置應該在volume中,并且該volume應該和一個特殊目的“配置編輯器”容器共享。你可以在這個容器中使用任何你喜歡的東西:SSH + 你最喜歡的編輯器,或一個接受API調用的web服務,或一個從外部源抓取信息的定時任務;諸如此類。另外,分離關注:一個容器運行服務,另外一個處理配置更新。“但是我做臨時更改,因為我正在測試不同的值!”在這種情況下,查看下一章節!

調試我的應用?

這可能是唯一需要進入container的場景了。因為你要運行gdb, strace, tweak配置,等。這種情況下,你需要 nsenter。

介紹 nsenter

nsenter是一個小的工具,用來進入命名空間中。技術上,它可以進入現有的命名空間,或者產生一個進程進入新的一組命名空間。“命名空間是什么?”他們是容器的重要組成部分。簡單點說:通過使用 nsenter ,你可以進入一個已經存在的container中,盡管這個container沒有運行ssh 或者任意特殊用途的守護進程。

從哪里獲得 nsenter ?

在GitHub上查看 jpetazzo/nsenter 。簡單的安裝是:

docker run -v /usr/local/bin:/target jpetazzo/nsenter 

它將會把 nsenter 安裝到 /usr/local/bin 中,你就可以立刻使用它了。

nsenter 也可以在你的發行版中獲得(在 util-linux 包中)。

如何使用?

首先,計算出你要進入容器的PID:

PID=$(docker inspect --format {{.State.Pid}} <container_name_or_ID>) 

然后進入容器:

nsenter --target $PID --mount --uts --ipc --net --pid 

在容器里,可以操作shell解析器。如果要想以自動化的方式來運行特殊的腳本或程序,把它作為參數添加到nsenter中。除了它使用容器代替了簡單目錄來工作外,它的工作方式有點像chroot。

遠程訪問怎么樣?

如果你需要從一個遠程主機進入一個容器,有(至少)兩個方法:

SSH 進入 Docker 主機,并使用 nsenter;

SSH 進入 Docker 主機,通過一個特殊的密鑰參數授權esenter命令 (也就是,nsenter)。

第一種方法相對簡單;但是需要root權限訪問Docker主機(從安全角度來說不是很好)。第二種方法在 SSH 的 authorized_keys 文件中使用 command= 模式。你可能熟悉 “古典的” authorized_keys文件,它看起來像這樣:

ssh-rsa AAAAB3N…QOID== jpetazzo@tarrasque

(當然,實際上一個真正的密鑰是很長的,一般都會占據好幾行。)你也可以強制使用一個專有的命令。如果你想要在你的系統上查看一個遠程的主機上可以有效使用的內存,可以使用SSH密鑰,但是你不會希望交出所有的shell權限,你可以在authorized_keys文件中輸入下面的內容:

command="free" ssh-rsa AAAAB3N…QOID== jpetazzo@tarrasque 

現在,當使用專有的密鑰進行連接時,替換取得的shell,它可以執行free命令。除此之外,就不能做其他的。(通常,你可能還想要添加no-port-forwarding;如果希望了解更多信息可以查看authorized_keys(5)的手冊(manpage))。這種機制的關鍵是使得責任分離。Alice把服務放在容器內部;她不用處理遠程的訪問,登陸等事務。Betty會添加SSH層,在特殊情況(調試奇怪的問題)下使用。Charlotte會考慮登陸。等等。

總結

在一個容器中運行SSH服務器,這真的是一個錯誤(大寫字母W)嗎?老實說,沒那么嚴重。當你不去訪問Docker主機的時候,這樣做甚至是極其方便的,但是這仍然需要在容器中取得一個shell。除此之外,我們還有許多方式可以在容器中運行SSH服務器,并能取得所有我們想要的特性,而且其架構還非常清晰。Docker允許你使用任何最適合你的工作流。但是,在做這些之前,迅速步入“我的容器真的是一個小的VPS”這句流行語的(語境)時,請注意還有其他的解決方案,這樣你才可以做出一個明智的決定。

以上所述是小編給大家介紹的在Docker容器中不需要運行sshd的原因淺析,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對VEVB武林網網站的支持!


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
色偷偷偷亚洲综合网另类| 在线播放日韩精品| 国产91精品黑色丝袜高跟鞋| 中文字幕综合一区| 欧美在线xxx| 亚洲国产99精品国自产| 久久久久久网站| 国产精品精品久久久久久| 91精品国产综合久久久久久久久| 亚洲欧美国产精品久久久久久久| 少妇精69xxtheporn| 另类美女黄大片| 欧美xxxx14xxxxx性爽| 性欧美视频videos6一9| 久久精品成人欧美大片| 欧美国产欧美亚洲国产日韩mv天天看完整| 国内精品久久久久影院优| 久久视频这里只有精品| 欧美成人激情在线| 日韩中文字幕免费看| 欧美精品免费看| 91精品在线看| 日韩久久午夜影院| 亚洲a中文字幕| 成人午夜两性视频| 亚洲视频网站在线观看| 亚洲成人av在线播放| 精品国内自产拍在线观看| 久久久久久久久爱| 国产精品丝袜高跟| 国产精品久久久久av| 欧美国产亚洲精品久久久8v| 国产香蕉精品视频一区二区三区| 亚洲第一精品久久忘忧草社区| 不卡在线观看电视剧完整版| 日韩资源在线观看| 成人有码在线播放| 亚洲福利视频免费观看| 成人午夜小视频| 日韩av在线直播| 久久久久北条麻妃免费看| 国产热re99久久6国产精品| 日韩第一页在线| 日韩在线视频网| 日韩美女中文字幕| 精品偷拍各种wc美女嘘嘘| 亚洲成人1234| 国产精品美女www| 国产91av在线| 91理论片午午论夜理片久久| 欧美资源在线观看| 中文字幕欧美精品日韩中文字幕| 欧美成人一区在线| 久久免费精品视频| 九九热精品视频| 国产成人avxxxxx在线看| 久久久国产一区二区三区| 亚洲精品视频免费在线观看| 在线精品国产欧美| 中文综合在线观看| 欧美日本国产在线| 亚洲精品国产精品乱码不99按摩| 欧美精品18videosex性欧美| 亚洲日韩第一页| 欧美激情精品久久久久久免费印度| 日本高清不卡的在线| 国产精品香蕉在线观看| 久久天天躁狠狠躁夜夜av| 久久久亚洲成人| 国产精品福利在线| 日本老师69xxx| 久久精品美女视频网站| 欧美日韩国产第一页| 中文字幕免费精品一区高清| 久久精品在线播放| 国产精品一区二区久久精品| 5566成人精品视频免费| 亚洲视频网站在线观看| 国产精品日韩欧美| 亚洲视频在线观看| 国产精欧美一区二区三区| 草民午夜欧美限制a级福利片| 九九热在线精品视频| 欧美精品做受xxx性少妇| 欧美限制级电影在线观看| 亚洲人免费视频| 国产精品中文字幕久久久| 精品国偷自产在线视频| 91黄色8090| 9.1国产丝袜在线观看| 影音先锋欧美在线资源| 超在线视频97| 欧美成年人视频网站欧美| 欧美成人免费观看| 亚洲视频在线观看| 日韩av电影在线播放| 91久久国产综合久久91精品网站| 亚洲精品suv精品一区二区| 亚洲最大在线视频| 亚洲国产精品成人一区二区| 日韩精品高清在线观看| 久久久久久久久久婷婷| 亚洲天堂2020| 日本久久中文字幕| 欧美日韩人人澡狠狠躁视频| 欧美丰满少妇xxxx| 欧美成人午夜激情| 日韩电视剧在线观看免费网站| 色av中文字幕一区| 欧美日韩在线看| 精品视频在线播放| 91理论片午午论夜理片久久| 人妖精品videosex性欧美| 久久久久久97| 欧美性xxxx极品高清hd直播| 国产精品久久中文| 91网站在线免费观看| 一区二区日韩精品| 日韩精品亚洲视频| 欧美一级黄色网| 少妇激情综合网| 欧美国产日韩精品| 中文字幕欧美精品日韩中文字幕| 欧美成人激情在线| 国产日韩在线看片| 欧美日韩精品国产| 欧美国产日韩一区二区在线观看| 亚洲天堂av在线免费观看| 日韩免费高清在线观看| 欧美电影在线观看网站| 亚洲国产精品一区二区久| 亚洲va男人天堂| 欧美成年人网站| 成人精品久久一区二区三区| 国产精品一区二区三区毛片淫片| 国产精品久久久久久久久久ktv| 久久国产精品久久精品| 日韩欧美高清在线视频| 在线观看欧美日韩国产| 一区二区三区动漫| 成人精品一区二区三区| 精品视频9999| www.日韩视频| 在线观看国产精品91| 欧美疯狂xxxx大交乱88av| 亚洲一区二区久久| 原创国产精品91| 久久久久亚洲精品| 91免费欧美精品| 欧美午夜精品伦理| 97av视频在线| 国内精品中文字幕| 91亚洲精品久久久| 日本精品久久久久久久| 91欧美精品成人综合在线观看| 视频直播国产精品| 狠狠色狠狠色综合日日五| 91欧美日韩一区| 亚洲精品视频在线观看视频| 国产精品草莓在线免费观看| 久久成人这里只有精品| 亚洲成av人影院在线观看| 精品无人区乱码1区2区3区在线| 国产精品一区二区三区在线播放|