Git извлечь из файла PHP с shell_exec с помощью закрытых ключей - PullRequest
1 голос
/ 08 апреля 2011

Я создал скрипт php, который выполняет git-выборку для определенной папки:

точная команда:

usr/bin/git --git-dir=/home/bathan/www/sync_test/repo3//.git --work-tree=/home/bathan/www/sync_test/repo3/ fetch

Конечно, если я запускаю это в командной строке, оно работает отлично.

Теперь, когда я запускаю это с помощью shell_exec, я получаю следующую ошибку:

Permission denied, please try again.
Permission denied, please try again.
Permission denied (publickey,gssapi-with-mic,password).
fatal: The remote end hung up unexpectedly

Глядя на сервер, который пытается подключиться, точная ошибка:

8 апреля 10:52:17 myserver sshd [26230]: Не удалось пароль для Git из 192.15.136.253 порт 32878 ssh2

Итак, ок. Я предполагаю, что этот shell_exec не может прочитать настроенный мной ключ ~ / .ssh / id_rsa. Поэтому я даю разрешение 777 на этот файл и получаю эту ошибку.

@@@@@ @ ПРЕДУПРЕЖДЕНИЕ: незащищенный частный КЛЮЧЕВОЙ ФАЙЛ! @ @@@ Разрешения 0777 для '/home/bathan/.ssh/id_rsa' слишком открыть. Рекомендуется, чтобы ваш файлы закрытых ключей НЕ доступны другими. Этот закрытый ключ будет игнорируются. плохие разрешения: игнорировать ключ: /home/bathan/.ssh/id_rsa Разрешение отказано, пожалуйста, попробуйте еще раз. разрешение отказано, пожалуйста, попробуйте еще раз. разрешение отказано (ОткрытыйКлюч, GSSAPI-с-микрофоном, пароль). фатальный: удаленный конец завис неожиданно

Итак, я думаю, что git способен читать файл ключей. Если я верну правильные разрешения, я снова вернусь к первой ошибке.

Примечание: мой сервер apache настроен для работы с тем же пользователем (батаном), и это окно с Ubuntu.

Это ответ ssh -v

OpenSSH_5.5p1 Debian-4ubuntu5, OpenSSL 0.9.8o 01 Jun 2010
Pseudo-terminal will not be allocated because stdin is not a terminal.
debug1: Reading configuration data /home/bathan/.ssh/config
debug1: Applying options for gitserver
debug1: Reading configuration data /etc/ssh/ssh_config
debug1: Applying options for *
debug1: Connecting to git.myserver.com [77.171.171.229] port 22.
debug1: Connection established.
debug1: identity file /home/bathan/.ssh/id_rsa type 1
debug1: Checking blacklist file /usr/share/ssh/blacklist.RSA-1023
debug1: Checking blacklist file /etc/ssh/blacklist.RSA-1023
debug1: identity file /home/bathan/.ssh/id_rsa-cert type -1
debug1: Remote protocol version 2.0, remote software version OpenSSH_4.3
debug1: match: OpenSSH_4.3 pat OpenSSH_4*
debug1: Enabling compatibility mode for protocol 2.0
debug1: Local version string SSH-2.0-OpenSSH_5.5p1 Debian-4ubuntu5
debug1: SSH2_MSG_KEXINIT sent
debug1: SSH2_MSG_KEXINIT received
debug1: kex: server->client aes128-ctr hmac-md5 none
debug1: kex: client->server aes128-ctr hmac-md5 none
debug1: SSH2_MSG_KEX_DH_GEX_REQUEST(1024<1024<8192) sent
debug1: expecting SSH2_MSG_KEX_DH_GEX_GROUP
debug1: SSH2_MSG_KEX_DH_GEX_INIT sent
debug1: expecting SSH2_MSG_KEX_DH_GEX_REPLY
debug1: Host 'git.myserver.com' is known and matches the RSA host key.
debug1: Found key in /home/bathan/.ssh/known_hosts:4
debug1: ssh_rsa_verify: signature correct
debug1: SSH2_MSG_NEWKEYS sent
debug1: expecting SSH2_MSG_NEWKEYS
debug1: SSH2_MSG_NEWKEYS received
debug1: Roaming not allowed by server
debug1: SSH2_MSG_SERVICE_REQUEST sent
debug1: SSH2_MSG_SERVICE_ACCEPT received
debug1: Authentications that can continue: publickey,gssapi-with-mic,password
debug1: Next authentication method: gssapi-with-mic
debug1: Unspecified GSS failure.  Minor code may provide more information
Credentials cache file '/tmp/krb5cc_1000' not found
..
..

Есть идеи?

Ответы [ 2 ]

2 голосов
/ 08 апреля 2011

Вы уверены, что PHP-скрипт выполняется с тем же пользователем, которого вы настроили ~/.ssh/id_rsa с помощью?

например. во многих средах веб-сервер (например, Apache) работает с www-data. И я только предполагаю, что www-data не тот пользователь, в котором $HOME/.ssh/ находится id_rsa.

Попробуйте жестко закодировать расположение ssh-клавиши в вашем .ssh/config:

Host gitserver
Hostname fqdn.example.org
IdentityFile /home/THE-USER/.ssh/id_rsa

Если это не поможет, выполните отладку следующим образом:

Из PHP:

<?php
shell_exec("ssh -v gitserver");

Посмотрите, какие ключи используются в этом случае, чтобы понять, почему он может не работать.

0 голосов
/ 08 апреля 2011

Я нашел проблему.

rsa_id использовал перефразировку и, очевидно, он не был введен сценарием.

Я удалил парафраз с помощью: ssh-keygen -p, и это сработало как шарм.

Спасибо всем за помощь !!

...