Alpine容器安裝運行ssh


寫在前面

本文介紹了在Alpine容器(docker)上安裝運行ssh並保證外界(宿主機)能通過ssh登錄的方法,給出了相應的命令。在下在探索過程中借鑒了許多前人的經驗,在此先行謝過,所有參考內容都會給出鏈接。

正文

前言

本文所述的Alpine容器不限於通過 docker pull alpine:tag 拉取的鏡像建立的容器,而是泛指運行着Alpine操作系統的容器。

可以通過在容器內運行 cat /etc/issue 指令查看容器所運行的OS。注意,即便在容器內運行 cat /process/version 或 uname -a ,得到的仍然是宿主機的OS,參考文檔[1]。

過程

step1: pull & run Alpine container

沒什么好說的,需要注意的是在run的時候添加端口映射 -v xxxx:yyyy ,其中, xxxx 不建議為22,因為宿主機的ssh很可能已占用了該端口; yyyy 建議為22,因為這是傳統習慣,當然,也可以是其它數字。

step2: install

使用 apk add --no-cache openssh-server 安裝。參考文檔[2]。

step3: set

首先 vi /etc/ssh/sshd_config 打開配置文件,然后,1)找到 # port 22 ,去掉 # ,同時,如果您在step1中將22設置為別的數字,這里也要將22改成那個數字;2)[可選] 視情況修改 #PermitRootLogin prohibit-password 一句,具體可參考文檔[3]。3)保存,退出。該步驟還參考了文檔[2][4]。

step4: start

通過 /etc/init.d/sshd start 啟動。如果報錯 bash: /etc/init.d/sshd: /sbin/openrc-run: bad interpreter: No such file or directory ,請先依次執行 apk add --no-cache openrc 和 rc-update add sshd 。參考文檔[2][5]。

step5: test & debug

在宿主機上使用 ssh container-ip 測試是否能通,其中 container-ip 可以通過在宿主機上執行 docker inspect container-id | grep IPAddress 得到。如果報錯,請依次執行下面的命令。參考文檔[6]。

1 ssh-keygen -A
2 rc-status
3 touch /run/openrc/softlevel
4 /etc/init.d/sshd restart

 在下沒有詳細研究這些命令的含義,有興趣的讀者請自行學習。

step6: test & debug again

再次測試,這次可能得到下圖所示報錯。

解決方法:運行圖中建議的命令 ssh-keygen -f "/root/.ssh/known_hosts" -R "container-ip" ,親測 ssh-keygen -R "container-ip" 也可以。

這次,不出意外,可以得到類似下面的輸出,表明可以了。接下來可以配置ssh免密登錄,但這不在本文介紹范圍之內,請讀者自行學習。

寫在后面

本文是在下的實踐記錄。由於個體差異,不保證百分百解決您的問題,但希望能給您提供一些參考和思路。再次由衷感謝所有鏈接的作者。在下才疏學淺,錯誤疏漏之處在所難免,懇請廣大讀者批評指正,您的批評是在下前進的不竭動力。

參考

[1] 如何查看docker容器里的操作系統_ksj367043706的博客-CSDN博客

[2] Alpine 安裝 ssh 和 sftp - 一記

[3] sshd_config 中 PermitRootLogin 的探討_huigher的專欄-CSDN博客

[4] ssh配置文件詳解 - 簡書

[5] linux - Running OpenSSH in an Alpine Docker Container - Stack Overflow

[6] Unable to SSH into Docker container running Alpine Linux 3.10 - Stack Overflow


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM