以centos為基礎,目的使用ssh服務遠程連接docker容器。
環境:宿主機centos7(宿主機ip地址為192.168.164.130),直接搜索docker的centos鏡像,下載最新版本。
[root@localhost ~]# docker search -s 15 centos
[root@localhost ~]# docker pull docker.io/centos
使用centos鏡像啟動一個容器centos_ssh
[root@localhost ~]# docker run -it --name=centos_ssh centos /bin/bash
進入容器之后,升級並安裝ssh組件,命令如下:
[root@ fdb751de5762 ~]# yum -y update
[root@ fdb751de5762 ~]# yum -y install openssh-server
[root@ fdb751de5762 ~]# vi /etc/ssh/sshd_config
編輯sshd的配置文件/etc/ssh/sshd_config,將其中的UsePAM yes改為UsePAM no
在宿主機中生成密鑰對,把生成的公鑰文件中的內容復制到容器的/root/.ssh/authorized_keys里,如果無對應目錄則手動創建。
[root@localhost ~]# ssh-keygen -t rsa
[root@localhost ~]# cat /root/.ssh/id_rsa.pub
進入centos_ssh容器
[root@ fdb751de5762 ~]# mkdir .ssh
[root@ fdb751de5762 ~]# cd .ssh
[root@ fdb751de5762 .ssh]# vi authorized_keys
[root@ fdb751de5762 .ssh]# cat authorized_keys
設置容器root密碼
[root@ fdb751de5762 ~]# echo "root:123456"|chpasswd
創建 /var/run/sshd/目錄,要不然sshd服務啟動會報錯
[root@ fdb751de5762 ~]# mkdir /var/run/sshd/
[root@ fdb751de5762 ~]# /usr/sbin/sshd -D &
WARNING: 'UsePAM no' is not supported in Red Hat Enterprise Linux and may cause several problems.(1)
Could not load host key: /etc/ssh/ssh_host_rsa_key(2)
Could not load host key: /etc/ssh/ssh_host_ecdsa_key
Could not load host key: /etc/ssh/ssh_host_ed25519_key
啟動時會提示以上信息,(1)表示:修改了sshd_conf文件中的UsePAM yes改成UsePAM no
(2)表示:沒有主機的公私秘鑰,重新生成密鑰
[root@fdb751de5762 ~]# ssh-keygen -t rsa -f /etc/ssh/ssh_host_rsa_key
[root@fdb751de5762 ~]# ssh-keygen -t ecdsa -f /etc/ssh/ssh_host_ecdsa_key
[root@fdb751de5762 ~]# ssh-keygen -t ed25519 -f /etc/ssh/ssh_host_ed25519_key
[root@fdb751de5762 ~]# /usr/sbin/sshd -D &
[root@fdb751de5762 ~]# ps -ef | grep sshd
root 1 0 0 22:16 ? 00:00:00 /usr/sbin/sshd -D
root 33 7 0 22:37 pts/0 00:00:00 grep --color=auto sshd
[root@fdb751de5762 ~]# yum -y install lsof
[root@fdb751de5762 ~]# lsof -i:22
[root@ fdb751de5762 ~]# vi run.sh
#/bin/bash
/usr/sbin/sshd -D &
[root@fdb751de5762 ~]# chmod 755 run.sh
[root@fdb751de5762 ~]# exit
在宿主機中使用commit命令將centos_ssh創建為sshd_centos鏡像
[root@localhost ~]# docker commit fdb751de5762 sshd_centos
運行該鏡像並啟動sshd服務
[root@localhost ~]# docker run -p 10022:22 -d sshd_centos /usr/sbin/sshd –D
[root@localhost ~]# docker ps
說明:10022是宿主機的和容器的通訊端口,外面窗口(局域網)通過訪問地址
ssh root@宿主機IP -p 10022(IP和端口之間有空格,不是:)就能進入容器,如果沒有設置ssh免密登錄,則輸入剛才為容器的root用戶設定的密碼。
[root@localhost ~]# ssh root@192.168.134.130 -p 10022
如上所示,成功進入容器。
如果碰見下述錯誤
則可以執行下述指令#mv /root/.ssh/known_hosts /tmp