kylinv10系统docker容器配置ssh直连
如下图所示,我配置了docker容器的端口映射,端口号为3572,目标宿主机ip地址为192.168.1.114用户名为root

虽然容器已经启动,但是容器ssh直连失败,

由于是kylinv10系统,所以与常规的配网方式有所不同,比如service命令不存在

/etc/init.d/ssh文件不存在

具体解决方式如下:
首先,检查是否存在sshd文件,如果存在则执行该文件,启动 SSH 服务
which sshd
/usr/sbin/sshd

发现缺少主机密钥 (host keys) 文件,因此,在容器中运行以下命令以生成所需的ssh主机密钥:
ssh-keygen -A

然后,再次启动ssh服务
/usr/sbin/sshd
启动后,我们需要使用如下命令为容器配置一个初始密码:
passwd root

但是发现容器中没有安装过passwd,尝试安装也没有访问网络的能力,没关系,我们
可以使用直接修改/etc/shadow文件的方式强制修改登录密码,比如我希望密码是hw123123:
openssl passwd -1 "hw123123"

接下来我们把$1$oiv.40cq$q6oiehF2YhnKkWHNrH8SC0部分复制,然后使用如下命令打开/etc/shadow文件:
vim /etc/shadow

打开后的效果如下:

找到root用户的行,并将密码字段替换为生成的加密密码即将root:*:18357:0:99999:7:::修改为root:$1$oiv.40cq$q6oiehF2YhnKkWHNrH8SC0:18357:0:99999:7:::,修改后的效果如下(替换掉了*):

保存并退出之后,重启sshd服务:
/usr/sbin/sshd

然后,再次尝试直接连接docker容器,密码使用刚配置的hw123123

连接成功!
补充:
但是,如果重启容器,还需要重新配置,我们尝试让容器自动启动并可以被连接
需要借助一下命令,在宿主机中直接操作容器,比如:
在容器中创建/root/123目录
docker exec -u root -w /root b86f0a97398a mkdir /root/123


成功了,那么我们可以在宿主机的~/.bashrc中写入如下命令:
docker start b86f0a97398a
docker exec -u root -w /root b86f0a97398a ssh-keygen -A
docker exec -u root -w /root b86f0a97398a /usr/sbin/sshd

或者直接写一个start_docker_test.sh脚本,里面写上如下命令
#!/bin/bash
# 检查是否传入容器 ID
if [ -z "$1" ]; then
echo "请提供容器 ID 或名称作为参数!"
echo "用法: $0 <容器ID或名称>"
exit 1
fi
# 获取用户传入的容器 ID 或名称
CONTAINER_ID="$1"
# 检查容器是否正在运行
if docker ps --filter "id=$CONTAINER_ID" --filter "status=running" | grep -q "$CONTAINER_ID"; then
echo "容器 $CONTAINER_ID 已经启动。"
else
echo "容器 $CONTAINER_ID 未启动,正在启动并执行操作..."
# 启动容器
docker start $CONTAINER_ID
# 执行生成 SSH 主机密钥
docker exec -u root -w /root $CONTAINER_ID ssh-keygen -A
# 启动 SSH 服务
docker exec -u root -w /root $CONTAINER_ID /usr/sbin/sshd
# 进入容器 Bash
docker exec -it $CONTAINER_ID bash
fi

然后,尝试重启设备,之后直连,或者关闭容器后直接运行start_docker_test.sh脚本启动容器,进行ssh直连测试


ssh直连成功!
更多推荐
所有评论(0)