У меня есть сервер с клоном gitlab. Я настроил все, и он работает, но теперь я хочу сделать git pull автоматически. На этом я уже добавил ключ ssh:
https://help.github.com/articles/generating-ssh-keys/
Если я запускаю команду "git pull" через putty, она работает.
Теперь я хочу создать php файл, который автоматически запускает git. Я делаю это вот так:
<?php
echo shell_exec( 'git pull 2>&1' );
?>
Это дает следующую ошибку:
"Ошибка проверки ключа хоста. Fatal: удаленный конец неожиданно повесил трубку"
Я искал решение, и большинство вещей, которые я обнаружил, были проблемы с ключом ssh. Это работает, когда я запускаю команду от пользователя root. Я изменил владельца файла php на root.
Я совершенно новичок в этом, поэтому я мог бы пропустить что-то очевидное. Тем не менее, он работает, когда я выполняю git pull из командной строки, а не когда я вызываю php-скрипт, и я понятия не имею, как это исправить.
Это сообщение в блоге может помочь, основные моменты, которые он предлагает:
Создание php-скрипта следующим образом:
<?php
...
echo shell_exec("/full/path/to/bin/git pull 2>&1");
...
Примечание. Вы можете найти путь к вашей (Linux) установке Git, выполнив команду which git
Затем выполните начальную попытку Git с пользователем apache, чтобы убедиться, что удаленный файл добавлен в файл known_hosts
пользователя следующим образом:
sudo -u www git pull
Хотя это именовано, эта ошибка связана с "хост-ключом" вместо ключа, используемого для аутентификации с открытым ключом. Эта ошибка, скорее всего, означает, что ключ хоста (удаленного сервера git) изменился, поскольку он был сохранен в файле known_hosts
.
Проверьте ключ, хранящийся в файле .ssh/known_hosts
пользователя, под которым запускается php (httpd? Apache?). Чтобы исправить ошибку, удалите строку, соответствующую имени хоста или IP удаленного сервера git. (С точки зрения безопасности вы должны проверить новый "Ключ хоста", прежде чем принимать его.)
/etc/passwd
. Тем не менее, я предполагаю, что это на общем веб-хосте, поэтому вы не сможете этого сделать. Вместо этого вы можете проверить переменную среды HOME
( exec('echo $HOME')
).