rkt / image building:acbuild运行指令“忽略”

时间:2017-08-14 12:35:55

标签: rkt

我使用acbuild run遇到了意外行为。为了习惯这个想法,首先要使用运行SSH主机的基于CentOS7的容器。下面引用为centos7.aci的裸CentOS 7容器是使用给定here的指令在最新的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运行指令由于某种原因而无法正常工作......为了进行更多测试,我将其替换为 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运行指令再次无效 - 没有错误通知。可能与“忽略”指令使用>>|等运算符有关吗?我见过的示例中显示的所有命令都没有使用任何此类运算符,docs没有提及任何内容,Google搜索也没有帮助。在dockerfile RUN指令中,它们也可以正常工作......这里出了什么问题?

P.S。:我尝试在“忽略”chroot说明=&gt;中使用systemd-nspawn代替默认acbuild run引擎相同的结果

P.P.S:StackOverflow上还没有acbuild标签,所以我必须将其标记为rkt - 有足够声望的人可以创建一个吗? THX

1 个答案:

答案 0 :(得分: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>"

解释here