Невозможно использовать SSH с публичным IP-адресом во время развертывания в конвейере CI/CD
Я настраиваю конвейер CI/CD для своего проекта, и на этапе развертывания мне нужно подключиться по SSH к своему серверу, используя публичный IP-адрес. Однако я столкнулся с проблемой, когда SSH-соединение прерывается при использовании публичного IP-адреса. Вот моя настройка:
- Публичный IP: xx.xxx.xxx.xxx
- Локальный IP: 192.168.31.234
- SSH порт: 22 (как внутренний, так и внешний)
Что я пробовал: Доступ к локальной сети: SSH отлично работает с локальным IP (192.168.31.234) с помощью команды:
- ssh sourov@192.168.31.234
Настройка переадресации портов на моем маршрутизаторе:
- Внешний порт: 22
- Внутренний IP-адрес: 192.168.31.234
- Внутренний порт: 22
Настройки брандмауэра: UFW настроен на разрешение SSH (порт 22) как на IPv4, так и на IPv6: bash
22/tcp ALLOW Anywhere
22/tcp (v6) ALLOW Anywhere (v6)
ssh sourov@xx.xxx.xxx.xxx
Приводит к ошибке: ssh: connect to host 45.120.115.234 port 22: No route to host
on:
push:
branches:
- master
pull_request:
branches:
- master
jobs:
test:
runs-on: ubuntu-latest
steps:
- name: Check out repository
uses: actions/checkout@v3
- name: Set up Python
uses: actions/setup-python@v3
with:
python-version: '3.12'
- name: Install dependencies
run: |
python -m pip install --upgrade pip
pip install -r requirements.txt
- name: Run Django migrations
run: python manage.py migrate
working-directory : ./dining_manager
- name : Run Django test
run : python manage.py test
working-directory : ./dining_manager
deploy:
runs-on: ubuntu-latest
needs: test
if: github.ref == 'refs/heads/master'
steps:
- name: Check out the code
uses: actions/checkout@v3
- name: Test SSH Connectivity
run: |
ssh -o StrictHostKeyChecking=no sourov@xx.xxx.xxx.xxx "echo 'SSH connection successful'"
- name: Copy files to the server
uses: appleboy/scp-action@v0.1.1
with:
host: ${{ secrets.HOST }}
username: ${{ secrets.USERNAME }}
key: ${{ secrets.SSH_PRIVATE_KEY }}
target: /var/www/dajngo_graphql
source: ./
port: 22
timeout: "30s"
- name: Execute deploy commands over SSH
uses: appleboy/ssh-action@master
with:
host: ${{ secrets.HOST }}
username: ${{ secrets.USERNAME }}
key: ${{ secrets.SSH_PRIVATE_KEY }}
script: |
cd /var/www/dajngo_graphql
source myenvenv/bin/activate
cd /var/www/django_graphql/dining_manager
python manage.py migrate
python manage.py collectstatic --noinput
sudo systemctl restart your-gunicorn-service
```