使用密码 SSH 密钥推送

Push using passphrased SSH key

我在 OpenShift 3.11 (Kubernetes 1.11) 上有一个 Pod。从那个 POD,我需要使用密码短语 SSH 密钥推送到 GitHub 存储库。 现在我可以创建一个秘密了:

apiVersion: v1
data:
  known_hosts: Yml...
  passphrase: abcde...
  ssh-privatekey: LS0...
kind: Secret
metadata:
  name: git-ssh-mirror
  namespace: mynamespace
type: kubernetes.io/ssh-auth

不过我不知道如何以某种方式连接这个 Secret,使 Pod 可以同时使用私钥和密码短语。

任何指点将不胜感激。

创建的 git-ssh-mirror 秘密的 data 部分中的 passphrasessh-privatekey 字段可以安装在容器内:

  • Environment variables,或
  • Files

    1. 安装秘密作为环境变量 GIT_SSH_PASSPHRASEGIT_SSH_PRIVATEKEY在容器内:
    ...
    kind: Pod
    ...
    spec:
      containers:
      - name: mycontainer
        image: myimage
        env:
          - name: GIT_SSH_PASSPHRASE
            valueFrom:
              secretKeyRef:
                name: git-ssh-mirror
                key: passphrase
          - name: GIT_SSH_PRIVATEKEY
            valueFrom:
              secretKeyRef:
                name: git-ssh-mirror
                key: ssh-privatekey
    

    现在,使用容器内的环境变量GIT_SSH_PASSPHRASEGIT_SSH_PRIVATEKEY分别获取推送到GitHub仓库所需的SSH密码和私钥。

    1. 容器内的 文件 安装秘密:
    ...
    kind: Pod
    ...
    spec:
      containers:
      - name: mycontainer
        image: myimage
        volumeMounts:
        - name: git-ssh-secrets
          mountPath: "/etc/mypath"
          readOnly: true
      volumes:
      - name: git-ssh-secrets
        secret:
          secretName: git-ssh-mirror
    

    现在,创建的 git-ssh-mirror 秘密中 passphrasessh-privatekey 的值被 base-64 解码并存储在只读文件中 /etc/mypath/passphrase/etc/mypath/ssh-privatekey 分别在容器内。使用它们推送到 GitHub 存储库。

如果密码或 SSH 私钥需要 base-64 解码,请使用 base64 --decode 命令。