Ошибка 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, тогда это решает проблему?