我在使用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@sessions*requireds*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
以启用基于密钥而不是密码登录。它不起作用:密钥被拒绝。一旦您查看容器,原因就很明显了:~/.ssh/
中没有authorized_keys
文件。如果我
在密钥追加尝试之前添加acbuild run -- touch ~/.ssh/authorized_keys
指令,则会创建该文件,但它仍然是空的。因此,acbuild 运行指令再次不起作用 - 没有错误通知。是否与两个"忽略"指令都使用>>
和|
等运算符有关?我看到的示例中显示的所有命令都没有使用任何此类运算符,但文档没有提及任何内容,Google搜索也无济于事。在 dockerfileRUN
指令中,它们也可以正常工作...这里出了什么问题?
附言:我尝试在"忽略"acbuild run
指令中使用chroot
而不是默认的systemd-nspawn
引擎=>相同的结果
P.P.S.:StackOverflow上还没有acbuild
标签,所以我不得不将其标记为rkt
- 请问有足够声誉的人可以创建一个吗?感谢
好的,我了解使用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>"
如此处所述