Jör*_*ees 12 ssh authentication passwd docker
我正在尝试git clone myuser@server:repo.git从 docker 容器中运行 a 。在容器内(由于政策),我与 docker 主机系统(非 root)上的用户相同,并且我的家已安装。
可悲的是,当从或尝试通过 ssh 克隆时,server我收到如下错误消息:
No user exists for uid 1337
Run Code Online (Sandbox Code Playgroud)
要重现该问题,您可以运行以下 docker 容器:
docker run --rm -it -v /home/$USER:/home/$USER -e HOME=/home/$USER -w /home/$USER -u $UID:100 --cap-drop=ALL kiesel/debian-ssh-client
Run Code Online (Sandbox Code Playgroud)
并在容器内执行以下任一命令:
git clone myuser@server:repo.git
ssh -vT myuser@server
Run Code Online (Sandbox Code Playgroud)
/etc/passwd为我的 uid添加一行伪造似乎可以解决问题(例如getent passwd $USER > /tmp/mypasswd,然后将 a 添加-v /tmp/mypasswd:/etc/passwd:ro到docker runcmd)。
可悲的是,这需要遮蔽/修改容器的/etc/passwd,我可以想象这会在某些时候导致麻烦。
/etc/passwd?使用这个 bash 函数:
function docker--run() {
if [[ -z $1 ]]; then
echo 'docker--run [-v $PWD:/src] IMAGE'
return 1
fi
# useradd for ubuntu (which has adduser as well)
# adduser for alpine, others not tested
docker run -it --rm --entrypoint sh "$@" -c "
[ -x /usr/sbin/useradd ] && useradd -m -u $(id -u) u1 -s /bin/sh || adduser -D -u $(id -u) u1 -s /bin/sh;
exec su - u1"
}
Run Code Online (Sandbox Code Playgroud)
您可以将其运行为
docker--run -v /home/$USER:/home/u1 kiesel/debian-ssh-client
Run Code Online (Sandbox Code Playgroud)
它将u1在 docker 容器中使用您的用户 ID 创建一个用户,然后切换到该用户。
| 归档时间: |
|
| 查看次数: |
14831 次 |
| 最近记录: |