Ошибка ssh при резервном копировании репозитория битового сегмента

Я ранее разместил этот вопрос, но ответ там больше не работает.

Таким образом, при подготовке моего бродячего ящика с помощью Ansible, я получаю загадочную ошибку при попытке клонировать мое частное хранилище с помощью ssh. В сообщении об ошибке указано "Отказано в доступе (publickey)".

Тем не менее, если я перейду ssh, а затем выполню команду "git clone", частное хранилище успешно клонируется. Это указывает на то, что агент пересылки ssh действительно работает, и бродячее окно может получить доступ к моему личному ключу, связанному с репозиторием Bitbucket.

Я боролся в течение двух дней по этому вопросу и схожу с ума! Пожалуйста, кто-нибудь, помогите мне!!!

Vagrantfile:

Vagrant.configure("2") do |config|
  config.vm.box = "ubuntu/xenial64"
  config.vm.network "private_network", ip: "192.168.33.14"
  config.ssh.forward_agent = true

  config.vm.provider "virtualbox" do |vb|
    vb.memory = "1824"
  end

  # Only contains ansible dependencies
  config.vm.provision "shell",
    inline: "sudo apt-get install python-minimal -y"

end

Мой playbook.yml выглядит следующим образом:

---

- hosts: all
  become: true

  tasks:
    - name: create /var/www/ directory
      file: dest=/var/www/ state=directory owner=ubuntu group=www-data mode=0755

    - name: Add the user 'ubuntu' to group 'www-data'
      user:
        name: ubuntu
        shell: /bin/bash
        groups: www-data
        append: yes

    - name: Clone [My-Repo] bitbucket repo
      become: false
      git: 
        repo: git@bitbucket.org:[Username]/[My-Repo].com.git
        dest: /var/www/poo
        version: master
        accept_hostkey: yes

Сообщение об ошибке: ansible-playbook playbook.yml

fatal: [192.168.33.14]: FAILED! => {"changed": false, "cmd": "/usr/bin/git clone --origin origin '' /var/www/poo", "failed": true, "msg": "Cloning into '/var/www/poo'...\nPermission denied (publickey).\r\nfatal: Could not read from remote repository.\n\nPlease make sure you have the correct access rights\nand the repository exists.", "rc": 128, "stderr": "Cloning into '/var/www/poo'...\nPermission denied (publickey).\r\nfatal: Could not read from remote repository.\n\nPlease make sure you have the correct access rights\nand the repository exists.\n", "stderr_lines": ["Cloning into '/var/www/poo'...", "Permission denied (publickey).", "fatal: Could not read from remote repository.", "", "Please make sure you have the correct access rights", "and the repository exists."], "stdout": "", "stdout_lines": []}

Дополнительная информация:

  • ssh-add -l на моей машине содержит соответствующий ключ репозитория bitbucket.
  • ssh-add -l внутри поля vagrant также содержит соответствующий ключ репозитория bitbucket (через ssh-forwarding).

Все же клонирование работает, если сделано вручную в бродячей коробке ?:

vagrant ssh
git clone git@bitbucket.org:myusername/myprivaterepo.com.git
Then type "yes" to allow the RSA fingerprint to be added to ~/.ssh/known_hosts (as its first connection with bitbucket)

Любая помощь очень ценится и спасибо за чтение моего кошмара.

2 ответа

Решение

Как правило, это означает, что Ansible не пытается клонировать репо с тем же пользователем, что и пользователь, использующий vagrant ssh,

Чтобы лучше отлаживать происходящее, нужно запустить команду:

GIT_SSH_COMMAND='ssh -v' git clone ...

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

Как подсказывает kostix в комментариях, добавление id (или же id -a) в командах Ansible тоже будет полезно.


GustavMahler подтверждает в комментариях:

Вы были правы: Ansible клонировал репозиторий как пользователь, отличный от того, которого я ожидал.
Я добавил следующее, что решило задачу:

become: true 
become_user: vagrant 

Ssh-agent связан с терминальной сессией, а автоматические Ansible - нет. (То же самое для большинства заданий cron, fwiw.) Это также объясняет, почему все работает отлично, если вы вставляете SSH в свою Vagrant box и запускаете вещи.

Если вы добавите ansible_ssh_private_key_file: /path/to/file в playbook, тогда это решает проблему?

Другие вопросы по тегам