首页 > 解决方案 > 构建 Container-Optimized OS - Swap SSH 实现

问题描述

TL;DR: 我正在尝试修改 sshd_conf 并将二进制文件添加到容器优化的操作系统映像中。修改是不是很疯狂chromeos-base-2.ebuild

背景
我(尝试)使用https://cloud.google.com/container-optimized-os/docs/how-to/building-from-open-source中的说明构建自己的容器优化操作系统映像。我的目标是交换我们的 SSH 身份验证部分。

为此,我需要执行两个操作:

  1. 修改 sshd_config
  2. 包括一个额外的二进制文件(即可执行的)

我正试图以一种容器优化的操作系统友好的方式来做到这一点。

我的想法是我修改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 上的图像。

问题:

  1. 这是疯了吗?
  2. 我的二进制文件包含在生成的映像中,但我更改的 sshd_config 被默认的覆盖。

我最初的方法是使用打包程序来简单地更改配置并添加二进制文件,但二进制文件需要是可执行的。我想我可以将二进制文件放入其中,/var/lib/cloud但感觉有点脏。

标签: containersgoogle-compute-engine

解决方案


最好在具有自定义配置的容器中简单地运行您自己的 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. 这需要确保您对包的更改被拾取。否则使用来自缓存的预构建包。


推荐阅读