构建容器优化的操作系统 - 交换SSH实施

时间:2018-06-13 14:23:46

标签: containers google-compute-engine

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. 包含一个额外的二进制文件(可执行文件)
  3. 我正在尝试以容器优化的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上的图像。

    问题:

    1. 这是疯了吗?
    2. 我的二进制文件包含在生成的图像中,但我更改的sshd_config将被默认的覆盖。
    3. 我最初的方法是使用packer简单地更改配置并添加二进制文件,但二进制文件需要是可执行的。我想我可以将二进制文件放在/var/lib/cloud中,但感觉有点脏。

2 个答案:

答案 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。然后工作流程为:

  1. 禁用SSHd(最好是在bootcommand中)
  2. 通过wget(来自GCS或类似)
  3. 下载新的SSHD配置
  4. 重新启动您的SSHd
  5. 用Aditya的话来说:

      

    我强烈建议您使用容器化的ssh服务器   方法(如果需要,您可以禁用主机sshd)。   或者,您可以从您的sshd_config进行修改   云配置。这样,即使/ etc /下的更改不是   持续性,它们只会在每次启动时重新应用。

    TL; DR:尽量不要推出自己的cos图像,最终会失去快节奏的开发(并且需要自己支持)