Linux /bin/sh:/usr/sbin/sshd keygen:没有这样的文件或目录
我对linux和docker的概念一无所知 在我的windows机器中,我在虚拟机中启动centos7 在运行docker compose构建时,我得到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
/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"]