除了特别说明外,否则以下命令均为ubuntu 22.04 容器内执行!!!
安装
查看ubuntu22.04 有没有安装openssh-server,执行命令:sudo dpkg --list | grep ssh
没有找到openssh-server的包,很显然,没有安装,那么就开始安装,执行:sudo apt install openssh-server
安装完成后,通过上图相关的包已经安装好了。这时,查看ssh服务的状态,执行:service ssh status
或者 ps -ef | grep sshd
。
注意:这里为什么用service命令,而不用systemctl命令呢? ubuntu 22.04容器没有这个权限
ssh服务有配置文件,需要进行修改一下:
修改/etc/ssh/sshd_config配置文件,仅修改其中两处即可,原来是被注释的,现在取消注释。
Port 22
ListenAddress 0.0.0.0
修改完配置文件,重新启动ssh服务,执行命令:service ssh restart
。 此时,你使用宿主机通过ssh客户端去连接ubuntu 22.04 的ssh server,结果连不上,那就说明还有问题没有解决。ubuntu 22.04 容器是宿主机的一个进程,要与ubuntu 22.04容器通信需要宿主机映射端口给该容器。
特别注意:
1、参考文档来源# 配置远程连接容器内镜像(映射容器内系统的22端口到宿主机上)
2、由于创建容器时,没有对容器进行端口映射配置,所以需要将当前容器保存为镜像A,然后以镜像A创建新容器并配置端口映射。
# 特别说明:以下命令均在宿主机上执行
# 停止指定的容器
docker stop $(container_id)
# 通过指定的容器创建镜像
docker commit $(container_id) $(new_imager_name)
# 查看本地镜像
docker images
# 查看宿主机8112端口是否占用
netstat -ap | grep 8112
# 通过指定的新镜像运行容器,并映射宿主机8112端口到ubuntu 22.04容器22端口
# 映射宿主机的当前运行docker命令的目录到ubuntu 22.04的/workspace目录
# 设置ubuntu 22.04 总是跟随宿主机启动
docker run -itd -p 127.0.0.1:8112:22 --restart=always -v $PWD:/workspace -u 1000 --security-opt seccomp=unconfined ${new_imager_id}
注意:这里映射的是127.0.0.1地址,所以只有宿主机能通过ssh连接上;如果需要其他主机也能通过ssh连接上,需要修改为0.0.0.0
宿主机的防火墙对的IP和Port有限制,所以宿主机需要在防火墙开放8112端口。
# 特别说明:以下命令均在宿主机上执行
# 查看防火墙的状态
sudo ufw status
# 启动防火墙
sudo ufw enable
# 防火墙条件规则,放行8112端口
sudo ufw allow 8112
# 重启防火墙
sudo ufw reload
连接
ssh服务配置好后,可以使用ssh客户端去连接,执行命令:ssh cj@localhost -p 8112
或者 ssh [email protected] -p 8112
,接着按照提示输入密码。
注意:这里的用户cj是在ubuntu 22.04容器内已经创建好的
标签:容器,ubuntu22.04,宿主机,22.04,ssh,ubuntu,8112 From: https://www.cnblogs.com/caojun97/p/18342123