Docker容器中的SSH免密登錄詳解
Docker的SSH免密登錄
在日常的開(kāi)發(fā)和測(cè)試環(huán)境中經(jīng)常需要?jiǎng)?chuàng)建和管理Docker容器。
有時(shí),出于調(diào)試或管理的目的,可能需要SSH到容器內(nèi)部。
本文將介紹如何創(chuàng)建一個(gè)Docker容器,它在啟動(dòng)時(shí)自動(dòng)運(yùn)行SSH服務(wù),并支持免密登錄。
構(gòu)建支持SSH的Docker鏡像:
僅為示例,實(shí)際操作時(shí)應(yīng)選擇更強(qiáng)的密碼,并為免密登錄生成了必要的SSH密鑰。
FROM ubuntu:20.04
MAINTAINER "傷心的辣條"
# 安裝openssh-server
RUN apt-get update && apt-get install -y openssh-server && \
mkdir /var/run/sshd
# 設(shè)置root密碼(在此例中設(shè)置為'root',但在生產(chǎn)環(huán)境中,請(qǐng)使用更強(qiáng)的密碼)
RUN echo 'root:root' | chpasswd
# 為SSH免密登錄設(shè)置SSH key
RUN rm -f /etc/ssh/ssh_host_rsa_key && \
ssh-keygen -t rsa -f /etc/ssh/ssh_host_rsa_key -N '' && \
rm -f /etc/ssh/ssh_host_dsa_key && \
ssh-keygen -t dsa -f /etc/ssh/ssh_host_dsa_key -N '' && \
rm -f /etc/ssh/ssh_host_ecdsa_key && \
ssh-keygen -t ecdsa -f /etc/ssh/ssh_host_ecdsa_key -N '' && \
rm -f /etc/ssh/ssh_host_ed25519_key && \
ssh-keygen -t ed25519 -f /etc/ssh/ssh_host_ed25519_key -N ''
# SSH登錄設(shè)置
RUN sed -i 's/#PermitRootLogin prohibit-password/PermitRootLogin yes/' /etc/ssh/sshd_config
# 容器啟動(dòng)時(shí)啟動(dòng)SSH服務(wù)
CMD ["/usr/sbin/sshd", "-D"]構(gòu)建與運(yùn)行:注意映射到宿主機(jī)的22端口可能與宿主機(jī)的SSH服務(wù)沖突,可以選擇其他端口,本案例使用1234端口。
客戶端生成SSH密鑰對(duì):
ssh-keygen
使用ssh-copy-id命令來(lái)幫助完成免密登錄的設(shè)置:
ssh-copy-id -i ~/.ssh/id_rsa.pub root@容器所在主機(jī)的IP -p 容器映射的端口
SSH連接到容器:完成以上步驟后從任何客戶端都可以使用以下命令輕松SSH到容器內(nèi),無(wú)需密碼。
ssh root@容器所在主機(jī)的IP -p 容器映射的端口
運(yùn)行結(jié)果:


注意事項(xiàng):在生產(chǎn)環(huán)境中,強(qiáng)烈建議不要允許root用戶通過(guò)密碼登錄。
允許SSH登錄到容器并不是一種推薦的做法,因?yàn)樗赡軙?huì)增加安全風(fēng)險(xiǎn)。
如果真的需要,考慮使用更安全的方式,如SSH密鑰對(duì),而不是密碼。
結(jié)論:Docker為我們提供了一個(gè)輕量級(jí)、隔離的環(huán)境來(lái)運(yùn)行應(yīng)用和服務(wù)。雖然SSH到容器內(nèi)部不是一種推薦的操作,但在某些情況下,這可能是必要的。
原理圖解:

到此這篇關(guān)于Docker容器中的SSH免密登錄詳解的文章就介紹到這了,更多相關(guān)Docker的SSH免密登錄內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- 在vscode中使用ssh運(yùn)行docker:從下載到運(yùn)行全流程
- 手工制作docker鏡像-包含多個(gè)服務(wù)ssh+nginx
- Dockerfile為鏡像添加SSH服務(wù)的實(shí)現(xiàn)步驟
- Docker容器實(shí)現(xiàn)SSH遠(yuǎn)程直連
- Docker配置WebSSH的實(shí)現(xiàn)
- 教你如何通過(guò)?SSH?連接到?Docker?容器
- 使用ssh連接docker服務(wù)器的方法
- 在docker中開(kāi)啟sshd操作
- 創(chuàng)建支持SSH服務(wù)的Docker鏡像的方法
- Docker容器中啟用SSH服務(wù)的方法步驟
相關(guān)文章
SpringBoot Maven打包如何根據(jù)環(huán)境排除文件
文章介紹了在SpringBoot項(xiàng)目中,根據(jù)不同的環(huán)境(開(kāi)發(fā)、測(cè)試、生產(chǎn))進(jìn)行JSP文件打包處理的方法,通過(guò)配置`pom.xml`文件中的``標(biāo)簽,可以實(shí)現(xiàn)開(kāi)發(fā)環(huán)境保留`index.jsp`文件,測(cè)試環(huán)境和生產(chǎn)環(huán)境排除該文件2024-12-12
Java 創(chuàng)建動(dòng)態(tài)類和查看方法列表信息的實(shí)例
這篇文章主要介紹了 Java 創(chuàng)建動(dòng)態(tài)類和查看方法列表信息的實(shí)例的相關(guān)資料,需要的朋友可以參考下2017-06-06
解決Spring運(yùn)行時(shí)報(bào)錯(cuò):Consider defining a bean o
該文章主要講述了在使用Spring框架時(shí),如果遇到某個(gè)bean未找到的錯(cuò)誤,應(yīng)該在配置文件中定義該bean,解決方法是在對(duì)應(yīng)的類上添加@Component注解2025-01-01
Java對(duì)int[]數(shù)組做新增刪除去重操作代碼
這篇文章主要介紹了Java里面對(duì)int[]數(shù)組做新增刪除去重實(shí)現(xiàn),這里記錄下使用int[]數(shù)組對(duì)數(shù)組進(jìn)行新增刪除去重等操作,用來(lái)更加了解java里面的集合類思想,需要的朋友可以參考下2023-10-10
SpringBoot項(xiàng)目攔截器獲取Post方法的請(qǐng)求body實(shí)現(xiàn)
本文主要介紹了SpringBoot項(xiàng)目攔截器獲取Post方法的請(qǐng)求body,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-01-01
SpringBoot登錄驗(yàn)證token攔截器的實(shí)現(xiàn)
本文主要介紹了SpringBoot登錄驗(yàn)證token攔截器的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2022-07-07
java WSDL接口webService實(shí)現(xiàn)方式
這篇文章主要為大家詳細(xì)介紹了java WSDL接口webService實(shí)現(xiàn)方式的相關(guān)資料,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-04-04

