2013-05-24 1 views
1

Я застрял в операции, когда мне нужно выполнить команду Git pull, запущенную из PHP-скрипта. (пользователь добавляется в группу www-data) без ввода фразы. Я обнаружил, что это может быть решена с помощью команды:Как избежать ввода паролей для git pull, выполненных по www-данным

eval "$(ssh-agent)" 

ssh-add 

Но эта команда работает только под своим пользователем (например, джордж). Но если я пытаюсь выполнить следующую команду под WWW-данных в мерзавце клонированных хранилище:

sudo -u george git pull 

Я всегда получаю следующее messsage

Enter passphrase for key '/home/george/.ssh/id_rsa': 

Примечание: добавить пользователя в группу WWW-данных и visudo пользователей слишком. Но я не знаю, как решить пароль, проходящий или избегающий ввода фразы.

Большое спасибо за помощь.

ответ

2

Есть несколько способов, чтобы достичь того, что вы хотите:

  1. Самый «правильный», в моих глазах, способ:

    1. Сформировать специальный ключ SSH для вашего www-data пользователя, и убедитесь, что этот ключ не зашифрован с паролем —, потому что это ключевая фраза, которую попросит клиент SSH для дешифрования ключа, который затем используется для аутентификации.
    2. Разверните этот ключ удаленно (сильно зависит от вашей установки), чтобы он мог использоваться для доступа к чтению.
    3. Далее, вы должны сделать этот ключ, читаемый www-data пользователем, и только для этого пользователя (!), — что, ключевой файл должен принадлежать www-data и имеет 0600 (-rw-------) разрешение бит устанавливается на Это.

      Есть несколько способов для достижения этой цели:

      • Поскольку клиент SSH ищет ключевой файл в каталоге ~/.ssh (то есть каталог .ssh под домашним каталогом пользователя), у вас есть несколько варианты:
        • Если www-data пользователь имеет реальный домашний каталог в файловой системе (вы могли бы знать, запустив getent passwd www-data), вы можете создать каталог .ssh туда и поместите ключ в нем.
        • В сценарии вытягивания переопределите переменную окружения HOMEexport его новое значение) перед запуском git, чтобы клиент SSH разрешил домашний каталог в другое место. Остальное должно быть настроено так, как описано выше.
      • Клиент SSH поддерживает конфигурацию для каждого пользователя, где можно указать, где искать ключ и даже указывать разные ключи для разных серверов. См. Справочную страницу ssh_config(5).
      • Клиенты SSH обычно поддерживают указание расположения файла ключа в командной строке.Клиентский двоичный файл OpenSSH, обычно используемый на обычных ОС Linux и BSD, поддерживает параметр командной строки -i (означает «идентификатор»). Итак, еще один способ - написать сценарий оболочки, который просто вызывает ssh -i /path/to/the/key/file, и поместите путь к этому скрипту в переменную окружения ed), чтобы Git вызывал ваш скрипт вместо ssh.
  2. Использование sudo другой вариант (хотя я не нравится), но, скорее всего, новый процесс, запущенный с измененными учетными не наследуют определенные переменные среды, существующие в вашей сессии, рассказывающие клиент SSH, как связаться с работающий экземпляр ssh-agent, у которого есть ваш расшифрованный ключ, кешированный (да, существование этого агента - это то, что вам нужно только ввести парольную фразу один раз в интерактивном сеансе входа в систему).

    Итак, вы можете узнать, как работает ssh-agent и как сделать sudo сохранять переменные среды, связанные с ним при запуске вашего двоичного файла Git с измененными учетными данными.

    Я не уверен, что он будет работать, поскольку проблема с правами доступа к доступу к сокету Unix-домена (или fifo? —, который я не могу вспомнить в данный момент), предлагаемый работающим экземпляром ssh-agent для того, чтобы связаться с ним, так что вам нужно будет провести некоторое исследование.

  3. Используйте программу, например sshpass, чтобы передать пароль клиенту SSH.

    Это может быть сделано либо напрямую, либо путем обертывания самого клиента SSH (см. Выше).

    Обратите внимание, что этот подход воняет как это означает, что пароль хранится где-то в текстовом виде в каком-то сценарии. Таким образом, вы должны убедиться, что этот скрипт защищен так же, как незашифрованный ключ будет защищен в первом случае.

Еще одним вариантом было бы предложить доступ к репозиторию, используя только для чтения неаутентифицированный протокол (git:// или file:// схемы — что применимо). Идея заключается в том, что доступ к репозиторию может быть осуществлен несколькими способами, и даже разные URL-адреса (с различными схемами —, означающие протоколы) могут использоваться для извлечения и нажатия для одного и того же удаленного.

 Смежные вопросы

  • Нет связанных вопросов^_^