Записки погромиста

Записки погромиста на вольные темы

Деплой на сервер через GitHubActions и SSH

После того, как я настроил вход на сервер через SSH ключ, я захотел настроить деплой API блога из GitHub через GitHub Actions и SSH чтобы не нужно было использовать пароль для деплоя.

1. Сгенерировать SSH ключ.

Создадим ключ на сервере, куда будем деплоить. Для начала зайдем в папку ssh.

cd ~/.ssh

Когда будем создавать ключ, лучше не использовать рекомендации GitHub по созданию ключа, так как GitHub Actions не поддерживает новый алгоритм Ed22159. Поэтому используем другую команду:

ssh-keygen -t rsa -b 4096 -C "your_email@example.com"

Когда меню попросить назвать файл, лучше дать ему значимое имя вместо дефолтного (id_rsa), например github-actions, это поможет по истечении какого-то времени понять для чего создавался этот ключ. Когда меню попросить задать пароль, это поле нужно оставить пустым, так как мы не сможем его использовать в GitHub Actions. 

2. Добавить сгенерированный ключ в authorized_keys.

Для того, что бы машины использующие приватную часть ключа github-actions могли подключиться к серверу, нужно добавить его в authorized_keys.

cat github-actions.pub >> ~/.ssh/authorized_keys

3. Добавляем ключ в репозиторий GitHub.

Для того чтобы мы могли подключаться к удаленному серверу нужно добавить в секреты содержимое приватной части ключа. Откроем содержимое ключа github-actions и скопируем его.

nano github-actions

Далее в настройках репозитория GitHub создадим новый секрет и скопируем туда содержимое приватной части ключа (начиная со строки BEGIN RSA PRIVATE KEY).

4. Добавим использование SSH ключа в GitHub Actions flow.

Не будем изобретать велосипед и воспользуемся готовым экшеном — Install SSH Key Для работы он требует два параметра — key и known_hosts. key — это наш приватный ключ из секрета а known_hosts пока что будет просто плейсхолдер.

steps:
    - name: Install SSH Key
      uses: shimataro/ssh-key-action@v2
      with:
        key: ${{ secrets.SSH_PRIVATE_KEY }}
        known_hosts: 'just-a-placeholder-so-we-dont-get-errors'

5. Добавляем правильное значение known_hosts.

steps:
    - name: Install SSH Key
      uses: shimataro/ssh-key-action@v2
      with:
        key: ${{ secrets.SSH_PRIVATE_KEY }}
        known_hosts: 'just-a-placeholder-so-we-dont-get-errors'
    - name: Adding known known_hosts
      run: ssh-keyscan -H ${{ secrets.HOST }} >> ~/.ssh/known_hosts

Теперь можно воспользоваться scp или rsync для копирования файлов на сервер.

Published by

Оставьте комментарий