_netrc / .netrc альтернатива cURL - PullRequest
9 голосов
/ 04 марта 2011

Я изучал Git и cURL и нашел несколько ссылок на .netrc, которые могут помочь при аутентификации HTTP. Проблема в том, что .netrc глуп, потому что он хранит пароли в текстовом формате, что является большой проблемой безопасности для решения, которое я разрабатываю.

Есть ли альтернатива .netrc подходу? Можно ли разработать "аутентификационный бэкэнд" для cURL?

1 Ответ

6 голосов
/ 04 марта 2011

Обновление Апрель 2013 г., git 1.8.3 :

A новый помощник учетных данных только для чтения contrib/) добавлено взаимодействие с файлами .netrc/.authinfo.

Этот сценарий позволит вам использовать файлы netrc с шифрованием gpg , избегая проблемы с сохранением ваших учетных данныхв текстовом файле.

Чтобы включить этот помощник по учетным данным:

git config credential.helper '$shortname -f AUTHFILE1 -f AUTHFILE2'

(Обратите внимание, что Git добавит «git-credential-» к помощникуимя и найдите его в пути.)

См. полный пример на ". Есть ли способ пропустить ввод пароля при использовании https:// github"


Оригинальный ответ (март 2011 г.)

Единственная альтернатива (кроме случаев, когда она не используется и не используется ssh):

  • шифровать этофайл (например, в Windows с помощью утилиты 'crypt')
  • расшифровывает его непосредственно перед вызовом curl
  • , затем шифруетэто снова сразу после тcurl call

Обратите внимание, что в Unix этот файл обычно находится в режиме 600, видимом только вам.
В Windows (_netrc) этот файл должен находиться в вашем HOMEDIR, который не должен быть доступен (через Windows ACL) любым другим пользователям.
Но мне все еще не нравится пароль в виде обычного текста ...

Эта тема ,например, проходит через тот же процесс (в Unix для gpg, но он по-прежнему хорошо иллюстрирует решение):

Ниже я включил пример сценария, реализующего использование 'gpg', которыйможет быть использован для шифрования содержимого файла.Это в сценарии оболочки, однако я уверен, что вы можете адаптировать концепцию к вашему Perl-сценарию.

Я думаю, что для ваших нужд основная идея заключается в следующем:

  1. создать простой текстфайл с вашим паролем (и другой информацией)
  2. зашифруйте его с помощью gpg и сохраните зашифрованный файл;утилита простого текстового файла
  3. В сценарии perl расшифруйте зашифрованный файл в простой текстовый файл
  4. чтение содержимого простого текстового файла во время выполнения вашего скрипта
  5. удалите текстовый файл как можно скорее.

Вот лишь пример работы gpg:

#!/bin/sh
echo -n "Enter your password: "
read pass

FILE=~/mypassword
echo $pass > $FILE
gpg -c $FILE
rm -f $FILE

gpg $FILE.gpg
MYPASSWORD=`cat $FILE`
rm -f $FILE

echo $MYPASSWORD
...