у меня возникла проблема с клонированием репозитория git в моем приложении.
KEY_FILE = "/opt/app/.ssh/id_rsa"
def read_git_branch(config_id, branch):
config = RepoConfig.objects.get(id=config_id)
save_rsa_key(Credentials.objects.get(id=1).key)
git_ssh_identity_file = os.path.expanduser(KEY_FILE)
git_ssh_cmd = 'ssh -i %s' % git_ssh_identity_file
with Git().custom_environment(GIT_SSH_COMMAND=git_ssh_cmd):
with tempfile.TemporaryDirectory() as tmpdir:
repo = Repo.clone_from(config.url, tmpdir, branch=branch)
branch_obj, _ = Branch.objects.get_or_create(name=branch)
....
def save_rsa_key(key):
if not os.path.exists(os.path.dirname(KEY_FILE)):
try:
os.makedirs(os.path.dirname(KEY_FILE))
except OSError as exc:
if exc.errno != errno.EEXIST:
raise
with open(KEY_FILE, 'w') as id_rsa:
id_rsa.write(key)
os.chmod(KEY_FILE, 0o600)
Ожидаемый результат — клонировать репозиторий во временный каталог, что-то с ним сделать и удалить все файлы.
Вместо этого я получаю:
DEBUG/ForkPoolWorker-2] AutoInterrupt wait stderr: b'Ошибка проверки ключа хоста.\nНеустранимая ошибка: Не удалось прочитать из удаленного репозитория.\n\nУбедитесь, что у вас есть правильные права доступа\nи репозиторий существует.\n'
git.exc.GitCommandError: Cmd('git') не удалось из-за: кода выхода (128) cmdline: git clone --branch=master -v [email protected]:bar/project.git /tmp/tmpi_w2xhgt stderr: ' Ошибка проверки ключа хоста.
Когда я пытаюсь подключиться к тому же репо напрямую с машины с файлом ключа, созданным кодом выше, с помощью:
ssh-agent bash -c 'ssh-add /opt/app/.ssh/id_rsa; git clone [email protected]:bar/project.git'
Репо клонируется без проблем + хост добавляется в known_hosts
. После этого мой код работает как положено...
Это должно быть что-то с known_hosts
. У кого-нибудь была похожая проблема?
Спасибо за вашу помощь.