Почему команда в GitLab CI/CD не выполняется?

Здравствуйте. У меня есть сервер с установленным GitLab и другой сервер на Vultr, на котором я развертываю бота. Я успешно перенес публичный ключ из GitLab на сервер Vultr и могу подключаться по SSH без пароля. Однако, при выполнении команд в пайплайнах GitLab возникает ошибка при попытке выполнить следующую команду: 

``` 
$ scp "$CI_COMMIT_TAG".yml $SSH_USER@$SSH_HOST:/root/payment_bot/
``` 

Вот немного подробнее о настройках: 

- Я использую переменную `$SSH_PRIVATE_KEY`, которая содержит секретный ключ.
- Также добавляю хост к известным, выполняя команду `ssh-keyscan -H $SSH_HOST >> ~/.ssh/known_hosts`.
- Пользователь SSH указан как `$SSH_USER`, который равен `root`.
- Хост SSH задан как `$SSH_HOST`, куда также заполняется IP-адрес.

Тем не менее, при выполнении команды `scp` возникает ошибка:

```
Permission denied, please try again.
Permission denied, please try again.
root@#тут_ip: Permission denied (publickey,password).
lost connection
```

Ранее я успешно развертывал на другом сервере с теми же настройками, поэтому приватный ключ и другие файлы (например, Docker-файл) должны быть корректны. На новом сервере я также просмотрел конфигурации SSH и дал разрешение на доступ по публичным ключам, перезапустив службу после изменения конфигурации. 

В чем может быть проблема?
  • 3 декабря 2024 г. 3:53
Ответы на вопрос 2
Существует несколько возможных причин, по которым команда `scp` может не выполняться должным образом, несмотря на то, что вы уверены в правильности ваших настроек. Давайте рассмотрим наиболее распространённые проблемы и способы их устранения:

1. **Проверка переменной SSH_PRIVATE_KEY**:
   Убедитесь, что `SSH_PRIVATE_KEY` правильно загружен в GitLab CI/CD. Вы можете вывести его на экран в рамках выполнения вашего пайплайна (при этом будьте осторожны, чтобы не раскрывать ключи). Например:
   ```bash
   echo "$SSH_PRIVATE_KEY" | head -n 10
   ```
   Это поможет вам проверить, действительно ли ключ загружен корректно.

2. **Загрузка приватного ключа**:
   Убедитесь, что вы правильно создаёте файл с вашим приватным ключом и выставляете правильные права доступа. Пример:
   ```bash
   echo "$SSH_PRIVATE_KEY" > ~/.ssh/id_rsa
   chmod 600 ~/.ssh/id_rsa
   ```

3. **Проверка корректности SSH-аутентификации**:
   Попробуйте подключиться к серверу через SSH вручную, используя тот же приватный ключ и аутентификацию:
   ```bash
   ssh -i ~/.ssh/id_rsa $SSH_USER@$SSH_HOST
   ```
   Это поможет вам понять, работает ли аутентификация вне контекста CI/CD.

4. **Проблемы с `known_hosts`**:
   Убедитесь, что у вас правильно добавлен хост в `known_hosts`. Запустите следующую команду, чтобы увидеть содержимое `known_hosts`:
   ```bash
   cat ~/.ssh/known_hosts
   ```
   Убедитесь, что для `$SSH_HOST` установлен правильный IP-адрес и ключ.

5. **Права на директорию и файл**:
   Проверьте права доступа к директории `/root/payment_bot/` и общие настройки SSH на вашем сервере Vultr:
   - Убедитесь, что пользователь `root` имеет необходимые права на запись в директорию.
   - Убедитесь, что SELinux и Firewall (например, UFW или iptables) не блокируют SSH.

6. **Проверка конфигурации SSH-сервера**:
   Убедитесь, что в конфигурационном файле SSH-сервера (`/etc/ssh/sshd_config`) включены следующие параметры:
   ```
   PubkeyAuthentication yes
   PasswordAuthentication no
   ```
   После изменения конфигурации не забудьте перезапустить SSH-сервер:
   ```bash
   sudo systemctl restart sshd
   ```

7. **Лимитации по IP-адресам**:
   Проверьте, нет ли ограничений на стороне сервера Vultr по IP-адресу откуда происходит SSH-подключение. Попробуйте временно отключить файрвол на сервере, чтобы исключить эту возможность.

Если после выполнения всех этих шагов проблема не решилась, попробуйте просмотреть журналы SSH-сервера (`/var/log/auth.log` или `/var/log/secure`), чтобы получить дополнительные подсказки о том, почему аутентификация не проходит.
а откуда scp берет ключ? 
Ключ должен лежать на файловой системе и иметь права не больше 600, иначе scp и ssh будут ругаться "permissions are too open"
Похожие вопросы