0

我在使用acbuild run. 为了习惯 rkt,这个想法是从运行 SSH 主机的基于 CentOS7 的容器开始。下面引用的裸 CentOS 7 容器是使用此处centos7.aci给出的说明在最新的 CentOS7 安装上创建的。用于构建 SSHd ACI 的脚本是

#! /bin/bash
acbuild begin ./centos7.aci
acbuild run -- yum install -y openssh-server
acbuild run -- mkdir /var/run/sshd
acbuild run -- sed -i 's/PermitRootLogin prohibit-password/PermitRootLogin yes/' /etc/ssh/sshd_config
acbuild run -- sed 's@session\s*required\s*pam_loginuid.so@session optional pam_loginuid.so@g' -i /etc/pam.d/sshd
acbuild run -- ssh-keygen -A -C "" -N "" -q
acbuild run -- echo 'root:screencast' | chpasswd
acbuild set-name centos7-sshd
acbuild set-exec -- /usr/sbin/sshd -D
acbuild port add ssh tcp 22
acbuild write --overwrite centos7-sshd.aci
acbuild end

当它使用rkt run --insecure-options=image ./centos7-sshd.aci 服务器运行但连接尝试失败时,因为密码不被接受。如果我使用rkt enter进入正在运行的容器并在echo 'root:screencast' | chpasswd里面重新运行,我可以登录。所以该 acbuild run 指令由于某种原因无法正常工作......为了进行更多测试,我将其替换为 acbuild run -- mkdir ~/.ssh acbuild run -- echo "<rkt host SSH public key>“ >> ~/.ssh/authorized_keys

启用基于密钥而不是密码登录。它不起作用:密钥被拒绝。一旦你查看容器,原因就很明显了authorized_keys~/.ssh/. 如果我
acbuild run -- touch ~/.ssh/authorized_keys在尝试添加密钥之前添加指令,则会创建文件但它仍然是空的。因此,acbuild 运行指令再次不起作用 - 没有错误通知。这可能与两个“被忽略”的指令都使用>>和之类的运算符有关|吗?我见过的示例中显示的所有命令都没有使用任何此类运算符,但文档没有提及任何内容,Google 搜索也无济于事。在 dockerfileRUN指令中,它们也可以正常工作......这里出了什么问题?

PS:我尝试在“忽略”指令中使用chroot而不是默认引擎=>相同的结果systemd-nspawnacbuild run

PPS:StackOverflow 上还没有acbuild标签,所以我不得不将其标记为rkt- 有足够声誉的人可以创建一个吗?谢谢

4

1 回答 1

1

好的,我了解使用该acbuild run --debug选项会发生什么。什么时候

acbuild run -- echo 'root:screencast' | chpasswd

执行它返回Running: [echo root:screencast],管道在主机上执行。为了得到预期的结果,它应该是

acbuild run -- /bin/sh -c "echo 'root:screencast' | chpasswd"

或以一般形式

acbuild run -- /bin/sh -c "<cmd with pipes>"

正如这里所解释的

于 2017-08-14T14:02:57.480 回答