我正在尝试在 Jenkins 和 GitHub 之间建立
SSH
身份验证。同样,我使用 kubernetes secret 来存储私钥和公钥,并且在创建 pod 时安装 secrets。我用来创建秘密的命令:
kubectl create secret generic test-ssh --from-file=id_rsa=id_rsa --from-file=id_rsa.pub=id_rsa.pub --namespace jenkins
并将其映射到 pod 配置中:
volumes:
- secretVolume:
mountPath: "/root/.ssh"
secretName: "test-ssh"
创建 pod 后,我可以看到 secret 已正确映射到
~/.ssh
文件夹中,如下所示。
但问题是
~/.ssh
文件夹本身启用了粘性位权限
这阻止了构建在执行
known_hosts
命令时添加ssh-keyscan
文件
ssh-keyscan github.com >> ~/.ssh/known_hosts
bash: ~/.ssh/known_hosts: Read-only file system
我希望实现我能想到的两个解决方案之一
~/.ssh
文件夹后删除粘性权限任何人都可以帮助我了解是否有可能实现这一目标? 我已经尝试过
chmod -t .ssh
它给了我同样的错误chmod: changing permissions of '.ssh': Read-only file system
~/.ssh
文件夹的所有者是root
,我已经以root
用户身份登录。我已经通过运行 whoami
命令确认了这一点。
Secrets 不是允许更改权限的坐骑,因此您必须采取一些技巧才能使其正常工作。 最近我遇到了类似的问题,不得不让它发挥作用。我们使用自定义图像来执行 ssh 调用,因此我们将 .ssh 目录和 known_hosts 文件添加到图像中;在 Dockerfile 中设置权限。然后,我使用 subPath 来定位部署中的 id_rsa 和 id_rsa.pub 文件。我没有方便的映射,但如果需要明天可以展示我的意思。 我认为“官方”答案是将文件挂载在不同的位置,并使用共享挂载或在入口点文件/二进制文件中将它们复制到需要的位置。