TL; DR:
我正在尝试修改sshd_conf并将二进制文件添加到容器优化的操作系统映像中。修改chromeos-base-2.ebuild
是否很疯狂?
背景
我(尝试)使用来自https://cloud.google.com/container-optimized-os/docs/how-to/building-from-open-source的指令构建我自己的容器优化操作系统映像。我的目标是交换我们的SSH身份验证部分。
要做到这一点,我需要做两个动作:
我正在尝试以容器优化的os友好方式执行此操作。
我的想法是我修改src/overlays/overlay-lakitu/chromeos-base/chromeos-base/chromeos-base-2.ebuild
以包含我的二进制文件:
insinto /usr/sbin
doins "${FILESDIR}"/sshauth
fperms 700 /usr/sbin/sshauth
然后更改src/overlays/overlay-lakitu/chromeos-base/chromeos-base/files/sshd_config
以包含:
RSAAuthentication yes
PubkeyAuthentication yes
AuthorizedKeysFile /dev/null
AuthorizedKeysCommand /usr/sbin/sshauth
AuthorizedKeysCommandUser root
然后我运行emerge-lakitu chromeos-base
来重新构建我刚修改过的包。然后我运行./build_image --board=lakitu base
并将其用作GCE上的图像。
问题:
我最初的方法是使用packer简单地更改配置并添加二进制文件,但二进制文件需要是可执行的。我想我可以将二进制文件放在/var/lib/cloud
中,但感觉有点脏。
答案 0 :(得分:1)
最好只使用自定义配置在容器中运行自己的sshd代理。 这里有一个很好的例子:https://docs.docker.com/engine/examples/running_ssh_service/我测试过并且也在COS上工作。
确保使用iptables打开服务器正在侦听的端口。
sudo iptables -A INPUT -p tcp --dport <port> -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT
sudo iptables -A OUTPUT -p tcp --sport <port> -m conntrack --ctstate ESTABLISHED -j ACCEPT
如果需要,您还可以停止内置sshd服务并从主机本身重用端口22.
希望这有帮助。
编辑: 关于:
我的二进制文件包含在生成的图像中,但我更改的sshd_config被默认的覆盖。
确保您已经增加了ebuild修订版。即
将chromeos-base-2-r25.ebuild
符号链接重命名为chromeos-base-2-r26.ebuild
。这需要确保您对包的更改被选中。否则,将使用缓存中的预构建包。
答案 1 :(得分:0)
对于通过Google访问此处的任何人,除了在容器中运行sshd之外,您还可以使用cloud-init来设置sshd_config。然后工作流程为:
用Aditya的话来说:
我强烈建议您使用容器化的ssh服务器 方法(如果需要,您可以禁用主机sshd)。 或者,您可以从您的sshd_config进行修改 云配置。这样,即使/ etc /下的更改不是 持续性,它们只会在每次启动时重新应用。
TL; DR:尽量不要推出自己的cos图像,最终会失去快节奏的开发(并且需要自己支持)