docker安装sshd

docker安装sshd

介绍

docker 中安装 sshd,这样就可以 ssh 进入docker内远程开发了

安装

安装 openssh-server,会同时安装 openssh

1
yum -y install openssh-server

修改root密码

1
echo 'root:root'|chpasswd

配置host密钥

1
2
3
ssh-keygen -q -t rsa -b 2048 -f /etc/ssh/ssh_host_rsa_key -N ''    
ssh-keygen -q -t ecdsa -f /etc/ssh/ssh_host_ecdsa_key -N ''
ssh-keygen -q -t dsa -f /etc/ssh/ssh_host_ed25519_key  -N '' 

前台启动sshd

1
/usr/sbin/sshd

问题

  1. 执行sshd,失败

    1
    2
    
    [root@linux0 /]# sshd
    sshd re-exec requires execution with an absolute path
    

    解决:需要使用sshd全路径

    1
    
    [root@linux0 /]# /usr/sbin/sshd
    
  2. Could not load host key

    1
    2
    3
    4
    5
    
    [root@linux0 /]# /usr/sbin/sshd
    Could not load host key: /etc/ssh/ssh_host_rsa_key
    Could not load host key: /etc/ssh/ssh_host_ecdsa_key
    Could not load host key: /etc/ssh/ssh_host_ed25519_key
    sshd: no hostkeys available -- exiting.
    

    解决:

    1
    2
    3
    
    ssh-keygen -q -t rsa -b 2048 -f /etc/ssh/ssh_host_rsa_key -N ''    
    ssh-keygen -q -t ecdsa -f /etc/ssh/ssh_host_ecdsa_key -N ''
    ssh-keygen -q -t dsa -f /etc/ssh/ssh_host_ed25519_key  -N ''
    
  3. Failed to get D-Bus connection: Operation not permitted

    在容器里使用 systemd 来管理启动服务,虽然centos 7版本中的基础镜像存在 systemd,但是使用 systemctl 启动服务时就会报如下的错误:

    1
    
    Failed to get D-Bus connection: Operation not permitted
    

    这是因为 Docker 的设计理念是在容器里面不运行后台服务,容器本身就是宿主机上的一个独立的主进程,也可以间接的理解为就是容器李运行服务的应用进程。一个容器的生命周期是围绕这个主进程存在的,所以正确的使用容器的方法是将里面的服务运行在前台。

    再说 systemd,这个套件已经成为主流Linux发行版默认的服务管理,取代了传统的 SystemV 风格服务管理。systemd维护系统服务程序,它需要特权才能够去访问Linux内核。而容器并不是一个完整的操作系统,只有一个文件系统,而默认启动只是普通用户这样的权限访问Linux内核,也就是没有特权,所以自然就用不了!

    因此,请遵守容器设计原则,一个容器里运行一个前台服务!

    说了这么多,如何解决上面的报错呢?

    1. 以特权的模式运行容器
    创建容器:
    ```bash
    docker run -d -name centos7 --privileged=true centos:7 /usr/sbin/init
    ```
    进入容器:
    ```bash
    docker exec -it centos7 /bin/bash   #表示登录进容器后,自己又新开一个shell(/bin/bash),所以使用子进程的当时登录容器退出后,不会影响其它shell
    ```
     这样可以使用systemctl启动服务了。
    
  4. /etc/ssh/sshd_config中的参数

    usePam参数:https://unix.stackexchange.com/questions/673153/sshd-what-are-the-practical-effects-of-setting-usepam-no

    PermitRootLogin 默认为yes,作用:https://blog.csdn.net/huigher/article/details/52972013

    PubkeyAuthentication 默认为yes

参考:
https://blog.csdn.net/cxs_123/article/details/116276838
https://unix.stackexchange.com/questions/109380/why-does-sshd-requires-an-absolute-path

Built with Hugo
主题 StackJimmy 设计