除了特別說明外,否則以下命令均為ubuntu 22.04 容器內執行!!!
安裝
檢視ubuntu22.04 有沒有安裝openssh-server,執行命令:sudo dpkg --list | grep ssh
沒有找到openssh-server的包,很顯然,沒有安裝,那麼就開始安裝,執行:sudo apt install openssh-server
安裝完成後,透過上圖相關的包已經安裝好了。這時,檢視ssh服務的狀態,執行:service ssh status
或者 ps -ef | grep sshd
。 若ssh服務沒有執行,就執行命令啟動它:service ssh start
注意:這裡為什麼用service命令,而不用systemctl命令呢? ubuntu 22.04容器沒有這個許可權
此時,你使用宿主機透過ssh客戶端去連線ubuntu 22.04 的ssh server,結果連不上,那就說明還有問題沒有解決。ubuntu 22.04 容器是宿主機的一個程序,要與ubuntu 22.04容器通訊需要宿主機對映埠給該容器。
由於建立容器時,沒有對容器進行埠對映配置,所以需要將當前容器儲存為映象A,然後以映象A建立新容器並配置埠對映。以下是配置流程:
# 特別說明:以下命令均在宿主機上執行
# 停止指定的容器
docker stop $(container_id)
# 透過指定的容器建立映象
docker commit $(container_id) $(new_imager_name)
# 檢視本地映象
docker images
# 檢視宿主機8112埠是否佔用
netstat -ap | grep 8112
# 透過指定的新映象執行容器,並對映宿主機8112埠到ubuntu 22.04容器22埠
# 對映宿主機的當前執行docker命令的目錄到ubuntu 22.04的/workspace目錄
# 設定ubuntu 22.04 總是跟隨宿主機啟動
docker run -itd -p 127.0.0.1:8112:22 --restart=always -v $PWD:/workspace -u 1000 --security-opt seccomp=unconfined ${new_imager_id}
注意:這裡對映的是127.0.0.1地址,所以只有宿主機能透過ssh連線上;如果需要其他主機也能透過ssh連線上,需要修改為0.0.0.0
宿主機的防火牆對的IP和Port有限制,所以宿主機需要在防火牆開放8112埠。
# 特別說明:以下命令均在宿主機上執行
# 檢視防火牆的狀態
sudo ufw status
# 啟動防火牆
sudo ufw enable
# 防火牆條件規則,放行8112埠
sudo ufw allow 8112
# 重啟防火牆
sudo ufw reload
連線
ssh服務配置好後,可以在宿主機使用ssh客戶端去連線,執行命令:ssh cj@localhost -p 8112
或者 ssh cj@127.0.0.1 -p 8112
,接著按照提示輸入密碼。
注意:這裡的使用者cj是在ubuntu 22.04容器內已經建立好的
參考
# 配置遠端連線容器內映象(對映容器內系統的22埠到宿主機上)