SSH-avainten luominen GitHub Actions ja web-palvelimen välille

Nämä ohjeet selittävät, kuinka SSH-avainpari luodaan ja konfiguroidaan, jotta GitHub Actions voi automaattisesti lähettää tiedostoja web-palvelimelle SCP:n avulla.

1. SSH-avainparin luominen

Luo uusi SSH-avainpari omalla koneellasi. Käytä erityisesti tätä tarkoitusta varten luotua avainta (älä käytä henkilökohtaista SSH-avaintasi).

ssh-keygen -t ed25519 -C "github-actions-MyWeather" -f github_deploy_key
Huomio: Kun ohjelma kysyy salasanaa (passphrase), jätä se tyhjäksi painamalla Enter. GitHub Actions ei voi käyttää salasanalla suojattuja avaimia automaattisesti.

Tämä luo kaksi tiedostoa:

2. Julkisen avaimen lisääminen web-palvelimelle

Kirjaudu web-palvelimellesi SSH:lla ja lisää julkinen avain authorized_keys-tiedostoon:

# Kirjaudu web-palvelimelle
ssh -p 22 käyttäjänimi@palvelin.fi

# Luo .ssh-hakemisto jos sitä ei ole
mkdir -p ~/.ssh
chmod 700 ~/.ssh

# Lisää julkinen avain authorized_keys-tiedostoon
nano ~/.ssh/authorized_keys

Kopioi julkisen avaimen sisältö (tiedostosta github_deploy_key.pub) ja liitä se authorized_keys-tiedostoon uudelle riville. Tallenna ja sulje tiedosto (Ctrl+X, Y, Enter).

# Aseta oikeat käyttöoikeudet
chmod 600 ~/.ssh/authorized_keys

3. Yksityisen avaimen lisääminen GitHubiin

Avaa yksityinen avain (github_deploy_key) tekstieditorilla ja kopioi koko sisältö (mukaan lukien -----BEGIN OPENSSH PRIVATE KEY----- ja -----END OPENSSH PRIVATE KEY----- -rivit).

Siirry GitHubissa repositoryn asetuksiin:

  1. Mene repositoryn sivulle GitHubissa
  2. Klikkaa Settings
  3. Valitse vasemmalta Secrets and variablesActions
  4. Klikkaa New repository secret
  5. Anna nimi: WEB_SERVER_SSH_KEY
  6. Liitä yksityisen avaimen sisältö Value-kenttään
  7. Klikkaa Add secret

4. Muiden GitHub Secrets -arvojen lisääminen

Lisää vastaavalla tavalla seuraavat secrets:

Secret-nimi Arvo Esimerkki
WEB_SERVER_HOST Web-palvelimen osoite example.com
WEB_SERVER_USER SSH-käyttäjänimi webuser
WEB_SERVER_PATH Kohdehakemisto palvelimella /var/www/downloads
WEB_SERVER_SSH_KEY Yksityinen SSH-avain (Luotu vaiheessa 1)

5. Yhteyden testaaminen paikallisesti

Ennen kuin luotat GitHub Actionsin toimivuuteen, testaa yhteys paikallisesti:

ssh -i github_deploy_key -p 22 käyttäjänimi@palvelin.fi

Jos yhteys toimii ilman salasanan kysymistä, konfiguraatio on oikein!

6. GitHub Actions -workflow

GitHub Actions -tiedostossa (.github/workflows/build-and-deploy.yml) SCP-komento käyttää näitä secrets-arvoja:

- name: Deploy to web server via SCP
  env:
    SSH_KEY: ${{ secrets.WEB_SERVER_SSH_KEY }}
    WEB_HOST: ${{ secrets.WEB_SERVER_HOST }}
    WEB_USER: ${{ secrets.WEB_SERVER_USER }}
    WEB_PATH: ${{ secrets.WEB_SERVER_PATH }}
  run: |
    # Tallenna SSH-avain tiedostoon
    printf '%s\n' "$SSH_KEY" > deploy_key
    chmod 600 deploy_key

    # Lähetä tiedosto
    scp -i deploy_key -P 22 -o StrictHostKeyChecking=no \
        output/MyWeatherSetup.exe "${WEB_USER}@${WEB_HOST}:${WEB_PATH}/"

    # Siivoa avain
    rm deploy_key
  shell: bash
Tärkeää:

7. Vianmääritys

Jos deployment epäonnistuu, tarkista:

Lisätietoa: GitHub Actions käyttää Microsoftin Azure-palvelimia, joten IP-osoitteet voivat vaihdella. StrictHostKeyChecking=no -optio ohittaa host key -vahvistuksen, mikä on turvallista CI/CD-ympäristössä.