容器中启动ssh状态总是sshd is not running

在服务器使用podman创建/新建容器,进入容器中,成功安装 openssh-server 和 openssh-sftp-server,然后执行以下命令并查看状态:

# service ssh status
 * sshd is not running
# service ssh start
 * Starting OpenBSD Secure Shell server sshd
# service ssh status
 * sshd is not running  //实际并没有启动,其它PC也不能通过SSH连接容器

经过长时间排查,发现是创建容器时使用了命令选项"--network=host",如下所示:

podman run -d --network=host --privileged=true --name ContainerName ...

通过查阅资料了解到host模式直接使用宿主机的网络空间,该模式下无法使用-p命令选项映射端口,容器和宿主机直接共享端口(多次尝试让其它PC通过SSH连接服务器容器均未成功,实际是否可以未知,读者可使用podman ps命令查看端口映射关系)。因此需将创建容器的命令修改为:

podman run -d -p 1234:22 --privileged=true --name ContainerName ...
# 1234 是指定的宿主机端口(无超级管理员权限时端口号不得小于1024)
# 22 是指定的容器中端口(对应/etc/ssh/sshd_config文件中配置的Port变量)

然后进入容器中,再次执行以下命令并查看状态:

# service ssh status
 * sshd is not running
# service ssh start
 * Starting OpenBSD Secure Shell server sshd
# service ssh status
 * sshd is running  //正常

实测其它PC已可以通过 ssh -X -p 1234 username@server-ip 连接服务器运行中的容器。

  

Tips:

 (1) 如果需求差不多的话可以共用一个容器,在容器中使用root账户进行管理(或者创建一个具有sudo权限的管理账户),然后创建多个低权限账户提供给相关用户使用。使用以下命令可查看支持的数量上限:

sysctl -a | grep user\.max_user_namespaces

  (2) 如果需求不一致,可创建多个容器,每个容器映射不同的端口。这样用户就可以用不同的映射端口来访问不同的容器。

  

  

郑重提示:①本文不允许转载,若认可本文,可点赞收藏。

                      ②若有疑问,可在评论区留言相互讨论。

  • 6
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 10
    评论
Docker,可以使用不同的方法来实现容器SSH开机启动。以下是一种常见的方法: 1. 创建一个新的容器映像:首先,您需要在Dockerfile定义一个自定义镜像。在Dockerfile,使用RUN命令安装SSH服务器。您可以选择使用任何您熟悉和喜欢的SSH服务器,如OpenSSH Server。例如,可以使用以下命令在Ubuntu镜像安装OpenSSH服务器: ``` FROM ubuntu RUN apt-get update && apt-get install -y openssh-server ``` 2. 配置SSH服务器:在Dockerfile,使用RUN和COPY命令进行容器SSH服务器配置。对于OpenSSH服务器,您可以复制您自己的SSHD配置文件(sshd_config)到容器。使用COPY命令将配置文件复制到适当的位置。例如: ``` COPY sshd_config /etc/ssh/sshd_config ``` 然后,使用RUN命令更改权限和所有者: ``` RUN chmod 600 /etc/ssh/sshd_config && chown root:root /etc/ssh/sshd_config ``` 3. 启动SSH服务器:在Dockerfile,使用CMD或ENTRYPOINT命令启动SSH服务器。使用CMD时,可以将启动命令添加到Dockerfile的末尾。例如,可以使用以下命令启动OpenSSH服务器: ``` CMD ["/usr/sbin/sshd", "-D"] ``` 这将使用默认配置文件来启动SSH服务器。 4. 构建镜像和运行容器:使用docker build命令构建镜像,并使用docker run命令来运行容器。您可以在docker run命令指定SSH服务器的端口映射(如 `-p host_port:container_port`)和其他选项。例如: ``` docker build -t mysshimage . docker run -d -p 2222:22 --name mysshcontainer mysshimage ``` 此操作将构建名为mysshimage的镜像,并使用2222端口映射到容器的22端口。容器将在后台以mysshcontainer的名称运行。 这样,当您启动容器时,您可以使用SSH工具连接到该容器的IP地址和指定的端口(例如,localhost:2222)。您可以使用之前设置的用户名和密码进行身份验证,以便远程访问该容器。 请注意,这只是一种实现方式,还有其他方法也可以实现Docker容器SSH开机启动。具体实现取决于您对DockerSSH服务器的个人偏好和要求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值