有一些关于如何使用Docker + SSH的帖子。还有关于如何编辑安装在停靠器容器中的文件的帖子,这样编辑它们就不会导致权限变成根用户。
我试图将这两件事结合起来,这样我就可以将SSH放入一个坞容器中,并编辑文件,而不会混淆它们的权限。
对于使用正确的文件权限,我使用:
- /etc/passwd:/etc/passwd:ro
- /etc/group:/etc/group:ro在我的docker-compose.yml和
docker compose -f commands/dev/docker-compose.yml run \
--service-ports \
--user $(id -u) \
develop \
bash因此,当我启动码头容器时,我的用户与本地计算机是同一个用户。但是,这会破坏我在Docker容器中的SSH设置:
useradd -rm -d /home/ubuntu -s /bin/bash -g root -G sudo ubuntu
echo 'ubuntu:ubuntu' | chpasswd
# passwd -d ubuntu
apt install -y --no-install-recommends openssh-server vim-tiny sudo
# See: https://stackoverflow.com/questions/22886470/start-sshd-automatically-with-docker-container
sed 's@session\s*required\s*pam_loginuid.so@session optional pam_loginuid.so@g' -i /etc/pam.d/sshd
mkdir /var/run/sshd
bash -c 'install -m755 <(printf "#!/bin/sh\nexit 0") /usr/sbin/policy-rc.d'
ex +'%s/^#\zeListenAddress/\1/g' -scwq /etc/ssh/sshd_config
ex +'%s/^#\zeHostKey .*ssh_host_.*_key/\1/g' -scwq /etc/ssh/sshd_config
RUNLEVEL=1 dpkg-reconfigure openssh-server
ssh-keygen -A -v
update-rc.d ssh defaults
# Configure sudo
ex +"%s/^%sudo.*$/%sudo ALL=(ALL:ALL) NOPASSWD:ALL/g" -scwq! /etc/sudoers这里,我创建了一个名为ubuntu的用户,其密码为ubuntu,用于SSH。这使我可以在ubuntu@localhost中使用ubuntu密码。
问题是,通过将/etc/passwd文件挂载到我的容器中,我删除了容器中的ubuntu用户。这意味着当我尝试使用ssh -p 9002 ubuntu@localhost进行ssh时,身份验证失败(我将容器中的端口22绑定到主机上)。
有人有解决办法吗?
发布于 2022-10-04 23:52:50
这是第一个答案。
我可以用:
useradd -rm -d /home/yourusername -s /bin/bash -g root -G sudo yourusername而不是
useradd -rm -d /home/ubuntu -s /bin/bash -g root -G sudo ubuntu
echo 'ubuntu:ubuntu' | chpasswd然后,我:
在容器中运行ssh服务器。
su root
/usr/sbin/sshd -D -o ListenAddress=0.0.0.0 -o PermitRootLogin=yes我可以将ssh作为root (使用根密码" root ",我在Dockerfile中使用RUN echo 'root:root' | chpasswd设置)进入容器。
然后,我可以做su yourusername,以切换我的用户。虽然这是可行的,但这是相当恼人的,因为我需要烘焙用户名到Docker容器。
https://stackoverflow.com/questions/73954495
复制相似问题