ubuntu容器连接ssh

792 阅读1分钟

解决docker容器的访问问题,通过暴露22端口映射到宿主机端口,用ssh连接,可实现对容器内终端的可视化和编辑功能。

  • 一、编写dockerfile

  •     FROM ubuntu
      
        # Copy everything  
        COPY . ./  
          
        EXPOSE 22
    
  • 二、制作镜像

  • docker build -t ubt .

  • 三、运行容器

  • docker run -it -p 8089:22 ubt

  • 遇到一个问题:

  • ssh root@127.0.0.1:8089

    ssh: Could not resolve hostname 127.0.0.1:8089: Name or service not known

  • 根本就ping不通

  • ping 127.0.0.1:8089

    ping: 127.0.0.1:8089: Name or service not known

  • 这是因为docker里还没有安装ssh

  • 四、docker内配置

  •   apt-get update
      apt-get upgrade
      apt-get install -y openssh-server
      apt-get install -y openssh-server --fix-missing
      选择地区:Asia  Shanghai
      mkdir /var/run/sshd
      echo 'root:screencast' |chpasswd
      service ssh start
    
  • 五、宿主机上连接

  • ssh root@127.0.0.1 -p 8089

  • 但是还有一个bug:

  • Permission denied, please try again.

  • 六、docker里设置

  • ^C结束ssh

  • apt-get install vim

  • vim /etc/ssh/sshd_config

  • 在末尾加上

  •   RSAAuthentication yes
      PermitRootLogin yes
    
  • 修改root用户的密码

  •   passwd root
      service ssh restart
    
  • 七、成功

  • 此时,再登录ssh

  • ssh root@127.0.0.1 -p 8089

image.png

  • 八、后续问题

  • 这种方式最多只能连接10个

  • ssh root@127.0.0.1 -p 8089

    ssh_exchange_identification: read: Connection reset by peer

  • 这是因为并发数限定了

  • 于是,

  • vim /etc/ssh/sshd_config

  • MaxStartups 改为 80:10:100

(从第80个并发开始,以10%的几率拒绝访问,从100个并发开始全部拒绝)

  • service ssh restart

又可以访问了!

但是最好还是记得exit+回车优雅地退出吧~