containers - 构建 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 身份验证部分。
为此,我需要执行两个操作:
- 修改 sshd_config
- 包括一个额外的二进制文件(即可执行的)
我正试图以一种容器优化的操作系统友好的方式来做到这一点。
我的想法是我修改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 上的图像。
问题:
- 这是疯了吗?
- 我的二进制文件包含在生成的映像中,但我更改的 sshd_config 被默认的覆盖。
我最初的方法是使用打包程序来简单地更改配置并添加二进制文件,但二进制文件需要是可执行的。我想我可以将二进制文件放入其中,/var/lib/cloud
但感觉有点脏。
解决方案
最好在具有自定义配置的容器中简单地运行您自己的 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
. 这需要确保您对包的更改被拾取。否则使用来自缓存的预构建包。
推荐阅读
- javascript - ReactJS,带有 axios 的 Swiper 滑块
- node.js - 多对多关联不返回关联表
- xpath - XPath - 查找属性的值,稍后用于验证数量 - 页面对象框架
- python - 从 HTML 按钮运行 python 脚本
- git - 删除了对密码身份验证的支持。请改用个人访问令牌
- python - 一遍又一遍地将相同的数据帧传递给 Python 中的不同类和函数
- python - Django在For循环中的过滤器中使用变量
- sql - 使用 distinct 和 max 获取唯一字符串的最大值
- javascript - 如何使用 react-native-localize 本地化基于数组的文本
- python - Pycharm 无法在 Mac 上创建 Django 应用程序