
После того, как я настроил вход на сервер через 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 для копирования файлов на сервер.

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