当我们想要使用 github 操作执行 ansible 命令时如何管理 ssh 密钥文件
How to manage ssh key file when we want to execute ansible command with github actions
我有一个 github 存储库、一个 docker 存储库和一个 Amazon ec2 实例。我正在尝试使用这些工具创建 CI/CD 管道。这个想法是在 github 存储库主分支发生推送时将 docker 容器部署到 ec2 实例。我已经使用 github 操作来构建代码、构建 docker 图像并将 docker 图像推送到 docker 集线器。现在我想将最新的图像从 docker 集线器拉到远程 ec2 实例和 运行 一样。为此,我正在尝试从 github 操作执行 ansible 命令。但我需要将 .pem 文件指定为 ansible 命令的参数。我试图将 .pem 文件保存在 github 秘密中,但它没有用。我真的很困惑如何进行。
这是我的 github 工作流程文件
name: helloworld_cicd
on:
push:
branches:
- master
jobs:
build:
name: Build
runs-on: ubuntu-latest
steps:
- name: Check out code into the Go module directory
uses: actions/checkout@v1
- name: Go Build
run: go build
- name: Docker build
run: docker build -t helloworld .
- name: Docker login
run: docker login --username=${{ secrets.docker_username }} --password=${{ secrets.docker_password }}
- name: Docker tag
run: docker tag helloworld vijinvv/helloworld:latest
- name: Docker push
run: docker push vijinvv/helloworld:latest
我试过运行类似
的东西
ansible all -i '3.15.152.219,' --private-key ${{ secrets.ssh_key }} -m rest of the command
但这没有用。解决这个问题的最佳方法是什么
我猜你所说的“它不起作用”是什么意思 ansible
期望私钥是一个文件,而你提供的是一个字符串。
这个 page 在 git 集线器操作上展示了如何在 git 集线器操作上使用秘密文件。与您的情况等效的是执行以下步骤:
gpg --symmetric --cipher-algo AES256 my_private_key.pem
选择一个强密码并将此密码保存为 github 秘密中的秘密。称之为 LARGE_SECRET_PASSPHRASE
在 git
中提交加密的 my_private_key.pem.gpg
在解密此文件的操作中创建一个步骤。它可能看起来像:
- name: Decrypt Pem
run: gpg --quiet --batch --yes --decrypt --passphrase="$LARGE_SECRET_PASSPHRASE" --output $HOME/secrets/my_private_key.pem my_private_key.pem.gpg
env:
LARGE_SECRET_PASSPHRASE: ${{ secrets.LARGE_SECRET_PASSPHRASE }}
最后你可以 运行 你的 ansible
命令与 ansible all -i '3.15.152.219,' --private-key $HOME/secrets/my_private_key.pem
您可以轻松地使用 webfactory/ssh-agent
添加您的 ssh 私钥。您可以看到它的 documentation 并在 运行 执行 ansible
命令之前添加以下阶段。
# .github/workflows/my-workflow.yml
jobs:
my_job:
...
steps:
- actions/checkout@v2
# Make sure the @v0.5.2 matches the current version of the
# action
- uses: webfactory/ssh-agent@v0.5.2
with:
ssh-private-key: ${{ secrets.SSH_PRIVATE_KEY }}
- ... other steps
SSH_PRIVATE_KEY
必须是在存储库机密中注册的密钥。之后,运行 你的 ansible
命令没有传递私钥文件。
我有一个 github 存储库、一个 docker 存储库和一个 Amazon ec2 实例。我正在尝试使用这些工具创建 CI/CD 管道。这个想法是在 github 存储库主分支发生推送时将 docker 容器部署到 ec2 实例。我已经使用 github 操作来构建代码、构建 docker 图像并将 docker 图像推送到 docker 集线器。现在我想将最新的图像从 docker 集线器拉到远程 ec2 实例和 运行 一样。为此,我正在尝试从 github 操作执行 ansible 命令。但我需要将 .pem 文件指定为 ansible 命令的参数。我试图将 .pem 文件保存在 github 秘密中,但它没有用。我真的很困惑如何进行。 这是我的 github 工作流程文件
name: helloworld_cicd
on:
push:
branches:
- master
jobs:
build:
name: Build
runs-on: ubuntu-latest
steps:
- name: Check out code into the Go module directory
uses: actions/checkout@v1
- name: Go Build
run: go build
- name: Docker build
run: docker build -t helloworld .
- name: Docker login
run: docker login --username=${{ secrets.docker_username }} --password=${{ secrets.docker_password }}
- name: Docker tag
run: docker tag helloworld vijinvv/helloworld:latest
- name: Docker push
run: docker push vijinvv/helloworld:latest
我试过运行类似
的东西ansible all -i '3.15.152.219,' --private-key ${{ secrets.ssh_key }} -m rest of the command
但这没有用。解决这个问题的最佳方法是什么
我猜你所说的“它不起作用”是什么意思 ansible
期望私钥是一个文件,而你提供的是一个字符串。
这个 page 在 git 集线器操作上展示了如何在 git 集线器操作上使用秘密文件。与您的情况等效的是执行以下步骤:
gpg --symmetric --cipher-algo AES256 my_private_key.pem
选择一个强密码并将此密码保存为 github 秘密中的秘密。称之为
LARGE_SECRET_PASSPHRASE
在 git
中提交加密的my_private_key.pem.gpg
在解密此文件的操作中创建一个步骤。它可能看起来像:
- name: Decrypt Pem run: gpg --quiet --batch --yes --decrypt --passphrase="$LARGE_SECRET_PASSPHRASE" --output $HOME/secrets/my_private_key.pem my_private_key.pem.gpg env: LARGE_SECRET_PASSPHRASE: ${{ secrets.LARGE_SECRET_PASSPHRASE }}
最后你可以 运行 你的
ansible
命令与ansible all -i '3.15.152.219,' --private-key $HOME/secrets/my_private_key.pem
您可以轻松地使用 webfactory/ssh-agent
添加您的 ssh 私钥。您可以看到它的 documentation 并在 运行 执行 ansible
命令之前添加以下阶段。
# .github/workflows/my-workflow.yml
jobs:
my_job:
...
steps:
- actions/checkout@v2
# Make sure the @v0.5.2 matches the current version of the
# action
- uses: webfactory/ssh-agent@v0.5.2
with:
ssh-private-key: ${{ secrets.SSH_PRIVATE_KEY }}
- ... other steps
SSH_PRIVATE_KEY
必须是在存储库机密中注册的密钥。之后,运行 你的 ansible
命令没有传递私钥文件。