Linux /bin/sh:/usr/sbin/sshd keygen:没有这样的文件或目录

Linux /bin/sh:/usr/sbin/sshd keygen:没有这样的文件或目录,linux,docker,docker-compose,centos7,Linux,Docker,Docker Compose,Centos7,我对linux和docker的概念一无所知 在我的windows机器中,我在虚拟机中启动centos7 在运行docker compose构建时,我得到 /bin/sh: /usr/sbin/sshd-keygen: No such file or directory 如何纠正 我试图创建一个远程用户 docker-compose.yml version: '3' services: jenkins: container_name: jenkins image: jen

我对linux和docker的概念一无所知

在我的windows机器中,我在虚拟机中启动centos7

在运行docker compose构建时,我得到

 /bin/sh: /usr/sbin/sshd-keygen: No such file or directory
如何纠正

我试图创建一个远程用户

docker-compose.yml

version: '3'
services:
  jenkins:
    container_name: jenkins
    image: jenkins/jenkins
    ports:
      - "8080:8080"
    volumes:
      - "$PWD/jenkins_home:/var/jenkins_home"
    networks:
      - net
  remote_host:
    container_name: remote-host
    image: remote-host
    build:
      context: centos7
    networks:
      - net
networks:
   net:
一, 在Dockerfile更改中:

RUN /usr/sbin/sshd-keygen

2或尝试

RUN sshd-keygen

如果它包含在$PATH中的任何位置,它将执行。

默认情况下,centos会提取不包含sshd keygen的最新版本

您需要将Dockerfile更改为:

FROM centos:7
  ...
    && yum install -y initscripts \
    && /usr/sbin/sshd-keygen

CMD ["/usr/sbin/sshd", "-D"]
从centos更改为:7 将RUN/usr/sbin/sshd keygen替换为运行ssh 将基础映像从centos更改为从centos:7,它将工作

只需从centos更改即可 从centos开始:7


发生此错误的原因是,在docker centos运行centos 7和现在运行centos 8之前,docker文件应如下所示:

FROM centos:7

   RUN yum -y install openssh-server && \
    yum install -y passwd && \  #Added
    yum install -y initscripts  #Added 

RUN useradd remote_user && \
  echo "1234" | passwd remote_user --stdin && \
  mkdir /home/remote_user/.ssh && \
  chmod 700 /home/remote_user/.ssh

COPY remote-key.pub /home/remote_user/.ssh/authorized_keys

RUN chown remote_user:remote_user -R /home/remote_user/.ssh/ && \
    chmod 600 /home/remote_user/.ssh/authorized_keys

RUN /usr/sbin/sshd-keygen

#CMD /usr/sbin/sshd -D
CMD ["/usr/sbin/sshd", "-D"]

Dockerfile中的这一行存在问题:

运行/usr/sbin/sshd-keygen

这是执行此行时得到的:/etc/rc.d/init.d/functions:没有这样的文件或目录。 /usr/sbin/sshd keygen:未找到命令

对于不同的linux发行版,此init.d/functions文件是不同的。它特定于您正在运行的任何发行版。此文件包含存储在/etc/init中的大多数或所有shell脚本所使用的函数。d目录

要亲自尝试,只需从docker hub中提取CentOS:7图像,并从docker文件中测试运行步骤,如下所示:

docker容器运行-i-t-d-name测试中心:7

docker exec-it测试bash

cd/etc/rc.d/init.d

ls-a

此目录中没有名为函数的文件

在CentOS:7 Docker image中,您只需安装包initscripts即可安装此脚本,因此请将以下行添加到Dockerfile中:

从centos开始:7

在Dockerfile中运行yum install-y initscripts

Change RUN/usr/sbin/sshd keygen//Centos8不接受此命令

要运行ssh-keygen-A//这是可行的


我希望这个解决方案可以正常工作。

尝试下面的命令,而不是运行/usr/sbin/sshd-keygen 也正如其他人指出的那样: 从centos开始:7

运行ssh-keygen-A

只需从centos:7使用,而不用centos8基本映像

yum安装-y初始化脚本

注意:更新的initscripts bug fix增强包修复了几个bug,并添加了一个增强功能,现在可用于Red Hat Enterprise Linux 6/7

您根本不需要删除或删除下面的行

运行/usr/sbin/sshd-keygen

它将100%起作用

要了解有关initscripts bug修复增强的更多信息,请执行以下操作:

sshd keygen作为设置主机密钥的脚本,确实属于/usr/sbin。不过,请参见CentOS 7中的讨论。运行ssh-keygen不能代替丢失的sshd-keygen;它们做不同的事情,或者,更确切地说,后者使用一堆非默认选项调用前者来创建主机密钥注释,而不是用于扩展讨论;这段对话已经结束了。嗨,安基特。欢迎感谢您对堆栈溢出的贡献。我对这个答案投了反对票,因为它和这个问题的现有答案是一样的。请考虑删除它。这些命令做不同的事情。sshdkeygen是发行版提供的用于生成主机密钥的脚本。
FROM centos:7
  ...
    && yum install -y initscripts \
    && /usr/sbin/sshd-keygen

CMD ["/usr/sbin/sshd", "-D"]
FROM centos:7

   RUN yum -y install openssh-server && \
    yum install -y passwd && \  #Added
    yum install -y initscripts  #Added 

RUN useradd remote_user && \
  echo "1234" | passwd remote_user --stdin && \
  mkdir /home/remote_user/.ssh && \
  chmod 700 /home/remote_user/.ssh

COPY remote-key.pub /home/remote_user/.ssh/authorized_keys

RUN chown remote_user:remote_user -R /home/remote_user/.ssh/ && \
    chmod 600 /home/remote_user/.ssh/authorized_keys

RUN /usr/sbin/sshd-keygen

#CMD /usr/sbin/sshd -D
CMD ["/usr/sbin/sshd", "-D"]