天天看點

Docker容器學習梳理--SSH方式登陸容器

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

<code>[root@localhost ~]</code><code># docker images</code>

<code>REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE</code>

<code>centos7             7.3.1611            d5ebea14da54        2 weeks ago         311 MB</code>

<code>&lt;none&gt;              &lt;none&gt;              d5c154b612c8        2 weeks ago         311 MB</code>

<code>test</code>                <code>latest              ecefde07358f        11 weeks ago        599.6 MB</code>

<code>learn</code><code>/ping</code>          <code>latest              fea07d84b0df        4 months ago        196.7 MB</code>

<code>docker.io</code><code>/tomcat</code>    <code>latest              ebb17717bed4        4 months ago        355.4 MB</code>

<code>docker.io</code><code>/centos</code>    <code>latest              980e0e4c79ec        6 months ago        196.7 MB</code>

<code>nginx               1.9                 c8c29d842c09        9 months ago        182.7 MB</code>

<code>docker.io</code><code>/redis</code>     <code>2.8.19              dd9fe7db5236        22 months ago       110.7 MB</code>

<code> </code> 

<code>[root@localhost ~]</code><code># docker run -i -t centos7:7.3.1611 /bin/bash</code>

<code>[root@a3c8baf6961e /]</code><code># cat /etc/redhat-release</code>

<code>CentOS Linux release 7.3.1611 (Core)</code>

<code>[root@a3c8baf6961e /]</code><code># yum install wget vim</code>

<code>[root@a3c8baf6961e /]</code><code># wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo</code>

<code>安裝</code><code>ssh</code><code>服務端</code>

<code>[root@a3c8baf6961e /]</code><code># yum cleal all</code>

<code>[root@a3c8baf6961e /]</code><code># yum install passwd</code>

<code>[root@a3c8baf6961e /]</code><code># yum install openssh-server</code>

<code>修改容器密碼(提前yum -y reinstall cracklib-dicts)</code>

<code>[root@a3c8baf6961e /]</code><code># echo "123456" |passwd --stdin root</code>

<code>産生公私鑰</code>

<code>[root@a3c8baf6961e /]</code><code># ssh-keygen -t rsa     //一路回車</code>

<code>[root@a3c8baf6961e /]</code><code># cd ~/.ssh/</code>

<code>[root@a3c8baf6961e .</code><code>ssh</code><code>]</code><code># ls</code>

<code>id_rsa  id_rsa.pub</code>

<code>[root@a3c8baf6961e .</code><code>ssh</code><code>]</code><code># cp id_rsa.pub  authorized_keys</code>

<code>authorized_keys  id_rsa  id_rsa.pub</code>

<code>執行sshd指令,有報錯:</code>

<code>[root@a3c8baf6961e .</code><code>ssh</code><code>]</code><code># /usr/sbin/sshd</code>

<code>Could not load host key: </code><code>/etc/ssh/ssh_host_rsa_key</code>

<code>Could not load host key: </code><code>/etc/ssh/ssh_host_dsa_key</code>

<code>Could not load host key: </code><code>/etc/ssh/ssh_host_ecdsa_key</code>

<code>Could not load host key: </code><code>/etc/ssh/ssh_host_ed25519_key</code>

<code>解決辦法:</code>

<code>[root@a3c8baf6961e .</code><code>ssh</code><code>]</code><code># ssh-keygen -t rsa -f /etc/ssh/ssh_host_rsa_key     //均是一路回車</code>

<code>[root@a3c8baf6961e .</code><code>ssh</code><code>]</code><code># ssh-keygen -t dsa -f /etc/ssh/ssh_host_dsa_key</code>

<code>[root@a3c8baf6961e .</code><code>ssh</code><code>]</code><code># ssh-keygen -t rsa -f /etc/ssh/ssh_host_ecdsa_key</code>

<code>[root@a3c8baf6961e .</code><code>ssh</code><code>]</code><code># ssh-keygen -t rsa -f /etc/ssh/ssh_host_ed25519_key</code>

<code>再次執行sshd指令,如果沒有報錯,說明可以啟動了</code>

<code>[root@a3c8baf6961e .</code><code>ssh</code><code>]</code><code>#</code>

<code>-----------------------啟動</code><code>ssh</code><code>,如果報錯如下(這是centos7下的一個bug)-------------------------</code>

<code>[root@a3c8baf6961e .</code><code>ssh</code><code>]</code><code># systemctl restart sshd.service</code>

<code>Failed to get D-Bus connection: Operation not permitted</code>

<code>這個報錯在之前的文檔裡就已經提到過了</code>

<code>解決辦法如下:</code>

<code>先把上面的容器關閉(docker stop container-</code><code>id</code><code>),然後重新啟動容器,啟動時加上參數--privileged(特權參數,也可以是--privileged=</code><code>true</code><code>,如果啟動容器中挂載目錄沒有權限也可以添加此參數)和</code><code>/sbin/init</code><code>(代替</code><code>/bin/bash</code><code>),如下:</code>

<code>[root@localhost ~]</code><code>#  docker run --privileged -i -t centos7:7.3.1611 /sbin/init      </code>

<code>上面的容器啟動後,會一直在卡着的狀态中,先不用管,打開另一個終端視窗,檢視容器</code>

<code>[root@localhost ~]</code><code># docker ps</code>

<code>CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS                     NAMES</code>

<code>af40bd07fa0f        centos7:7.3.1611    </code><code>"/sbin/init"</code>        <code>28 seconds ago      Up 28 seconds                                 nauseous_shirley</code>

<code>然後按照容器的ID進去,這個時候再根據</code><code>/bin/bash</code><code>進入容器(前面加</code><code>exec</code> <code>-it參數),接着重新開機</code><code>ssh</code><code>服務就ok了</code>

<code>[root@localhost ~]</code><code># docker exec -it af40bd07fa0f /bin/bash</code>

<code>[root@af40bd07fa0f /]</code><code># systemctl restart sshd.service</code>

<code>[root@af40bd07fa0f /]</code><code># echo "123456" |passwd --stdin root    //注意這裡由于上述特殊情況重新啟動了容器,之前建立的root密碼無效了(這就相當于重新另起了一個容器),需要重新修改下root密碼!!可以随便建立個使用者,然後切換到root,測試下之前建立的root密碼是否還有效!</code>

<code>--------------------------------------------------------------------------------------------------</code>

<code>檢視</code><code>ssh</code><code>端口,發現22端口已經開啟</code>

<code>[root@af40bd07fa0f /]</code><code># ss -a|grep ssh</code>

<code>tcp    LISTEN     0      128     *:</code><code>ssh</code>                   <code>*:*                   </code>

<code>tcp    LISTEN     0      128    :::</code><code>ssh</code>                  <code>:::*                   </code>

<code>[root@af40bd07fa0f /]</code><code># ss -ln|grep 22</code>

<code>u_dgr  UNCONN     0      0         * 26884224              * 26885412          </code>

<code>tcp    LISTEN     0      128       *:22                    *:*                 </code>

<code>tcp    LISTEN     0      128      :::22                   :::* </code>

然後docker ps檢視下容器,送出更改為新鏡像,運作新的鏡像

<code>af40bd07fa0f        centos7:7.3.1611    </code><code>"/sbin/init"</code>        <code>21 minutes ago      Up 21 minutes                                 nauseous_shirley</code>

<code>記住這個容器ID,然後關閉</code>

<code>[root@localhost ~]</code><code># docker stop af40bd07fa0f</code>

<code>af40bd07fa0f</code>

<code>接着送出改為新的鏡像,使用上一步的容器ID,送出名為wangssh的鏡像(送出成功後,之前建立的容器可以選擇删除(docker </code><code>ps</code> <code>-a 檢視);當然不删除也不影響。建議不要删除,可以再次啟用送出新的鏡像以便他用。)</code>

<code>[root@localhost ~]</code><code># docker commit af40bd07fa0f wangssh</code>

<code>sha256:ca5e393b7605949e58c1067c1bc73d99d52f47107756f0ade1725ca04886fd71</code>

<code>[root@localhost ~]</code><code>#</code>

<code>送出成功後,使用docker images可以檢視到</code>

<code>wangssh             latest              ca5e393b7605        57 seconds ago      327.1 MB</code>

<code>然後運作新的鏡像</code>

<code>[root@localhost ~]</code><code># docker run -d -p 220:22 wangssh /usr/sbin/sshd -D</code>

<code>b0a845a3dedeac7b46002d1c8514077309d88dcc0667b7080bc1ab67d70eb167</code>

<code>docker: Error response from daemon: Cannot start container b0a845a3dedeac7b46002d1c8514077309d88dcc0667b7080bc1ab67d70eb167: [9] System error: SELinux policy denies access..</code>

<code>如上出現上面的報錯,這是由于selinux造成的!需要關閉selinux,如下:</code>

<code>[root@localhost ~]</code><code># setenforce 0</code>

<code>[root@localhost ~]</code><code># getenforce</code>

<code>Permissive</code>

<code>然後再次運作新的鏡像,就成功了!</code>

<code>0a7c1406361ef52dcc5c32801e4c7c231078594cd7010375ea33fe3024cc9126</code>

<code>上面運作指令中的參數解釋:</code>

<code>-d   背景運作容器</code>

<code>-p   容器端口映射到主機[可選]</code>

<code>使用docker </code><code>ps</code><code>檢視運作的容器</code>

<code>CONTAINER ID        IMAGE               COMMAND               CREATED              STATUS              PORTS                     NAMES</code>

<code>0a7c1406361e        wangssh             </code><code>"/usr/sbin/sshd -D"</code>   <code>About a minute ago   Up About a minute   0.0.0.0:220-&gt;22</code><code>/tcp</code>       <code>focused_hawking</code>

<code>此時你可以直接連接配接容器,也可以通過端口映射連接配接容器(使用之前建立的容器密碼123456登陸)</code>

<code>[root@localhost ~]</code><code># ssh -p220 root@localhost</code>

<code>root@localhost's password:</code>

<code>[root@0a7c1406361e ~]</code><code>#</code>

------------------------------------------------------------------------------------------------------------------

如果要想做ssh無密碼登陸的信任關系,隻需要将實體機本地的~/.ssh/id_rsa.pub拷貝到容器裡的~/.ssh/authorized_keys即可

<code>接着上面ID為aea267757cc9的容器登陸後的操作:</code>

<code>[root@localhost ~]</code><code># docker exec -it aea267757cc9 /bin/bash</code>

<code>[root@aea267757cc9 /]</code><code># ssh-keygen -t rsa    //一路回車</code>

<code>将實體機本地的~/.</code><code>ssh</code><code>/id_rsa</code><code>.pub拷貝到容器裡</code>

<code>[root@localhost ~]</code><code># docker cp ~/.ssh/id_rsa.pub aea267757cc9:/root/.ssh/</code>

<code>然後到容器裡将id_rsa.pub拷貝為authorized_keys</code>

<code>[root@aea267757cc9 /]</code><code># cd ~</code>

<code>[root@aea267757cc9 ~]</code><code># cd .ssh/</code>

<code>[root@aea267757cc9 .</code><code>ssh</code><code>]</code><code># cp id_rsa.pub authorized_keys</code>

<code>接着送出為新鏡像</code>

<code>aea267757cc9        centos7:7.3.1611    </code><code>"/sbin/init"</code>        <code>About an hour ago   Up 38 minutes                                 admiring_hodgkin</code>

<code>fc726a6a27d2        centos              </code><code>"/bin/bash"</code>         <code>3 months ago        Up 3 months         0.0.0.0:32772-&gt;80</code><code>/tcp</code>     <code>web1</code>

<code>9d99c7b9451b        centos              </code><code>"/bin/bash"</code>         <code>3 months ago        Up 3 months         0.0.0.0:32769-&gt;8080</code><code>/tcp</code>   <code>web3</code>

<code>[root@localhost ~]</code><code># docker stop aea267757cc9</code>

<code>aea267757cc9</code>

<code>[root@localhost ~]</code><code># docker commit aea267757cc9 hahassh</code>

<code>sha256:906bf1bd2a156b1222def7d3d21fbc2cd7e963fc923f5a6da92e6b45954688d9</code>

<code>[root@localhost ~]</code><code># docker run -d -p 220:22 hahassh /usr/sbin/sshd -D</code>

<code>8b9c153463c73122cfd787a27190a8665f54fe77fa51601d521baab5a9234f2e</code>

<code>最後嘗試</code><code>ssh</code><code>方式連接配接容器,發現可以無密碼登陸了~</code>

<code>Last login: Mon Mar 13 10:03:54 2017</code>

---------------------------------------------------------------------------------------------------------------------

當登陸到容器後,可以檢視下容器ip

<code>第一種方式:</code>

<code>CONTAINER ID        IMAGE               COMMAND               CREATED             STATUS              PORTS                     NAMES</code>

<code>b220fabf815a        wangssh             </code><code>"/usr/sbin/sshd -D"</code>   <code>6 hours ago         Up About an hour    0.0.0.0:20020-&gt;22</code><code>/tcp</code>     <code>gigantic_goldwasser</code>

<code>fc726a6a27d2        980e0e4c79ec        </code><code>"/bin/bash"</code>           <code>3 months ago        Up About an hour    0.0.0.0:32768-&gt;80</code><code>/tcp</code>     <code>web1</code>

<code>9d99c7b9451b        980e0e4c79ec        </code><code>"/bin/bash"</code>           <code>3 months ago        Up About an hour    0.0.0.0:32769-&gt;8080</code><code>/tcp</code>   <code>web3</code>

<code>[root@localhost ~]</code><code># docker inspect b220fabf815a |grep IPAddress</code>

<code>            </code><code>"SecondaryIPAddresses"</code><code>: null,</code>

<code>            </code><code>"IPAddress"</code><code>: </code><code>"172.17.0.2"</code><code>,</code>

<code>                    </code><code>"IPAddress"</code><code>: </code><code>"172.17.0.2"</code><code>,</code>

<code>第二種方式:</code>

<code>[root@localhost ~]</code><code># docker inspect --format='{{.NetworkSettings.IPAddress}}' b220fabf815a</code>

<code>172.17.0.2</code>

<code>第三種方式:</code>

<code>登陸到容器裡使用“yum </code><code>install</code> <code>net-tools”,安裝後就可以使用</code><code>ifconfig</code><code>指令檢視ip了 </code>

<code>當知道了容器的ip後,就可以使用</code><code>ssh</code><code>直接連接配接容器的22端口即可!</code>

<code>[root@localhost ~]</code><code># ssh 172.17.0.2</code>

<code>[email protected]'s password:</code>

<code>Last login: Tue Mar 14 09:11:27 2017 from 172.17.0.1</code>

<code>[root@b220fabf815a ~]</code><code>#</code>

***************當你發現自己的才華撐不起野心時,就請安靜下來學習吧***************

本文轉自散盡浮華部落格園部落格,原文連結:http://www.cnblogs.com/kevingrace/p/6526990.html,如需轉載請自行聯系原作者