简体   繁体   中英

Github Workflow Actions And EC2: Error Loading Key Invalid Format

I am trying to set up CI for my nodejs server. I would like to use github actions to ssh into my ec2 instance, where I can then git clone/pull my updated repo.

I can ssh into my ec2 instance on my local machine w no issues. I just do something like: "ssh -i keypar.pem username@some-ip.region.compute.amazonaws.com" and it connects. However, I can't seem to get a connection working on the worflow/actions script. Here is what I have in my workflow yml file:

name: CI

on: [push]

jobs: build:

runs-on: ubuntu-latest

steps:
- name: Connect
  env:
    DEPLOY_KEY: ${{ secrets.EC2 }}
  run: |
    eval `ssh-agent`
    ssh-add - <<< "${DEPLOY_KEY}"
    ssh ec2-user@ec2-instance-ip-here.us-east-2.compute.amazonaws.com

This script gets me the error "Error loading key "(stdin)": invalid format" . Also when I look at the deploy key section under repo settings, it says the key has never been used.

(Obviously I would need to install, clone, and perform other steps in addition to what is listed above.)

In summary:

1 how to I fix the invalid format error?

2 how do I load and reference the key pair?

There is a better way to perform SSH commands in a EC2:

name: CI
on: [push, pull_request]
jobs:
  # test:
  #   ...
  deploy:
    name: "Deploy to staging"
    runs-on: ubuntu-latest
    if: github.event_name == 'push' && github.ref == 'refs/heads/master'
    # needs: test
    steps:
      - name: Configure SSH
        run: |
          mkdir -p ~/.ssh/
          echo "$SSH_KEY" > ~/.ssh/staging.key
          chmod 600 ~/.ssh/staging.key
          cat >>~/.ssh/config <<END
          Host staging
            HostName $SSH_HOST
            User $SSH_USER
            IdentityFile ~/.ssh/staging.key
            StrictHostKeyChecking no
          END
        env:
          SSH_USER: ${{ secrets.STAGING_SSH_USER }}
          SSH_KEY: ${{ secrets.STAGING_SSH_KEY }}
          SSH_HOST: ${{ secrets.STAGING_SSH_HOST }}

      - name: Stop the server
        run: ssh staging 'sudo systemctl stop my-application'

      - name: Check out the source
        run: ssh staging 'cd my-application && git fetch && git reset --hard origin/master'

      - name: Start the server
        if: ${{ always() }}
        run: ssh staging 'sudo systemctl start my-application'

Credit: GitHub Actions: How to run SSH commands (without third-party actions)

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM