使用Docker建立乙個ssh連線的容器

2021-10-05 04:54:30 字數 1739 閱讀 2910

使用dockerfile建立乙個配置好sshd的映象

建立工作目錄

$ mkdir sshd_centos

$ cd sshd_centos

$ touch dockerfile run.sh

編寫run.sh指令碼和authorized_keys 檔案

run.sh內容(此處會產生問題,詳情見文章最後的文字敘述)

#!/bin/bash

/usr/sbin/sshd -d

再宿主機上生成ssh金鑰對,並建立authorized_keys 檔案

在root使用者目錄下建立.ssh目錄,並複製需要登入的公鑰資訊

(一般為本地主機使用者目錄下的.ssh/id_rsa.pub檔案,可由ssh-keygen -t rsa命令生成)

在宿主機執行命令 ssh-keygen -t rsa 生成rsa的公私金鑰對,金鑰對命名為id_rsa.pub

密碼設定為helloworld

$ cat ~/.ssh/id_rsa.pub > authorized_keys

(此時,在sshd_centos工作目錄下有三個檔案:run.sh、dockerfile、authorized_keys)

編寫dockerfile

from centos-zdx

maintainer from ******[email protected]

run sed -ri 『s/session required pam_loginuid.so/#session required pam_loginuid.so/g』 /etc/pam.d/sshd

add authorized_keys /root/.ssh/authorized_keys

add run.sh /run.sh

run chmod 755 /run.sh

expose 22

cmd ["/run.sh"]

建立映象

$ cd sshd_centos

$ sudo docker build –t sshd:dockerfile .

測試映象,執行容器

$ docker run –d –p 10122:22 sshd:dockerfile

在宿主機新開啟乙個終端,連線到新建容器

$ ssh 192.168.136.130 –p 10122

$ yes

$ 輸入rsa密碼:helloworld

成功連線!

產生問題:

由於run.sh執行指令碼中命令是/usr/sbin/sshd –d

會產生attach進入容器後就進入了這個命令的shell狀態並且ctrl+c退出就會把容器停掉。所以要優化一下

方法如下:

將run.sh中/usr/sbin/sshd –d 末尾加上&符號 作用是啟用sshd服務後退出shell狀態,即/usr/sbin/sshd –d & wq儲存退出,然後重新用dockerfile建立映象。

啟動容器:

docker run -dit --name test sshd:dockerfile sh -c 「/run.sh && /bin/bash」

xshell外部ssh連線docker容器:需要將~/.ssh/目錄下的公鑰檔案id_rsa和id_rsa.pub 匯出,用xshell連線時,輸入宿主機ip以及與容器22埠相對應的宿主機大埠,登陸使用者名稱root,然後選擇使用公鑰連線,並將公鑰檔案匯入,輸入rsa密碼helloworld然後連線成功!

使用docker建立乙個伺服器並用ssh登入

docker run it rm name test h test m 500m ubuntu 18.04 bin bash預設是root使用者,沒有密碼的。使用passwd修改密碼 找到對應的版本,進行替換 apt update apt install openssh server usr sbi...

動手建立乙個Docker映象

1.拉取centos基礎映象 執行docker pull centos 7.2.1511。2.建立dockerfile檔案 建立乙個新目錄,然後增加以下內容到dockerfile檔案裡面。from centos 7.2.1511 maintainer abtest run yum install w...

建立乙個crontab專用docker容器

root localhost crontab cat sweep cron 需要提供path,因為cron bash和系統環境變數不一致 path usr local bin usr local sbin usr local bin usr sbin usr bin sbin bin 配置cron,...