Как лучше всего хранить зашифрованный пароль SVN на сервере Ubuntu?

8

Алло,

У меня Ubuntu Server работает под управлением сервера Subversion. Я запускаю клиент на той же машине через SSH, и я хотел бы, чтобы клиент svn запоминал мой пароль, но не сохранял его в виде открытого текста. Глядя здесь, я вижу два метода: gnome-keyring и kwallet. Поскольку я не использую менеджер рабочего стола, я немного осторожен в попытке использовать один из них. Какие-либо предложения? Было бы хорошо (или даже работать), чтобы использовать одно из двух приложений, которые я упомянул?

ТИА

Энди
источник

Ответы:

9
  1. Вы можете запустить Gnome-keyring или Kwallet на удаленной машине. Каждый состоит из двух компонентов: демона и графического интерфейса.

    • Вы можете запустить приложение с графическим интерфейсом на удаленном компьютере, если вы запускаете ssh с переадресацией X. Тот факт, что это «серверный» компьютер, не означает, что вы не можете устанавливать на него приложения с графическим интерфейсом. Неважно, используете ли вы соответствующую рабочую среду или нет, приложениям не нужна определенная рабочая среда.

    • Вы можете управлять Kwallet через командную строку qdbus, хотя в данном конкретном случае это не очень хорошая идея, поскольку вам придется писать свой пароль в виде открытого текста в командной строке, и другие пользователи могут отследить его. Смотрите также этот ответ SU .

    • Существует привязка Python для Gnome-keyring и Kwallet (пакетов python-keyring-gnomeи python-keyring-kwallet); Вы могли бы написать крошечный скрипт на python для управления ими. На самом деле для Gnome-keyring уже есть одна: gkeyring .

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

  2. Если вы используете Gnome-keyring или Kwallet локально, вы можете переслать их через ssh, немного поработав. Они используют сокеты Unix, которые ssh не может пересылать. Но вы можете использовать socatретрансляцию Unix-сокетов на TCP-сокеты локально и наоборот на удаленной машине:

    while true; do socat TCP-LISTEN:22007 UNIX-CONNECT:"$GNOME_KEYRING_SOCKET"; done &
    ssh -R22007:localhost:22007 remote.example.com
    export GNOME_KEYRING_SOCKET="$HOME/.gnome-keyring-socket"
    while true; do socat UNIX-LISTEN:"$GNOME_KEYRING_SOCKET" TCP4:localhost:22007; done &
    

    Это можно автоматизировать с помощью небольших сценариев оболочки на каждой стороне и RemoteForwardстроки ~/.ssh/config. Теоретически, вы сможете получить доступ к связке ключей gnome с удаленного компьютера. Тем не менее, я попытался получить к нему доступ с морским коньком, и он даже не пытался подключиться $GNOME_KEYRING_SOCKET; Я не знаю почему, и я не знаю, сможет ли svn получить доступ к связке ключей.

  3. Вы можете хранить свой пароль SVN в зашифрованной файловой системе. Есть несколько вариантов ; Я думаю, что самый простой способ начать это encfs. Начальная настройка:

    sudo aptitude install encfs
    encfs ~/.passwords.encrypted ~/.passwords
    mv ~/.subversion/auth ~/.passwords/svn-auth
    ln -s ../.passwords/svn-auth ~/.subversion/auth
    

    Нормальный рабочий процесс:

    encfs ~/.passwords.encrypted ~/.passwords
    ... work ...
    fusermount -u ~/.passwords
    

    Этот метод имеет мое предпочтение по нескольким причинам:

    • И начальная настройка, и обычный рабочий процесс очень просты.
    • Неважно, откуда вы входите, в частности вам не нужен локальный X-сервер и использовать X-переадресацию через ssh.
    • Зашифрованная файловая система более универсальна, чем набор ключей (хотя это менее удобно для использования набора ключей, но в случае svn это не имеет значения).
    • Единственный не повсеместный инструмент, который вам нужен - это encfs (для которого требуется FUSE), и он упакован для Ubuntu.
Жиль "ТАК - перестань быть злым"
источник
Больше, чем я мог надеяться в ответе, спасибо! Я попробую третий подход и доложу.
Энди
Очень полный ответ.
this.josh
Можно ли выручить Subversion, если ~ / .subversion / auth пуст / не существует? В противном случае третий подход немного опасен, если вы забудете сначала запустить encfs.
unhammer
@unhammer При таком подходе, если файловая система encfs не смонтирована, то ~/.subversion/authэто символическая ссылка. В этом случае Subversion сообщает вам, что собирается сохранить ваш пароль (если вы не отключили это уведомление), но фактически не хранит его нигде (протестировано с SVN 1.6.6). Таким образом, нет никакого риска с третьим подходом.
Жиль "ТАК - перестань быть злым"
ага, я сначала попробовал без символической ссылки, но теперь я вижу символическую ссылку на папку внутри зашифрованной папки, работает, спасибо за очистку этого :-)
unhammer
0

gpg зашифровывает файл с паролем, но для этого вам понадобится фраза-пароль (и не теряйте закрытый ключ!).

Я полагаю, что вы можете проверить svn закрытый ключ, а также вам понадобится фраза-пароль, чтобы использовать его, но вся эта установка кажется немного странной.

зачем тебе это нужно?

Sirex
источник
Я не ищу способ шифрования общего назначения, а способ, который прекрасно подходит для SVN. Когда я использовал SVN на Ubuntu dekstop, проблем не было, поэтому я предполагаю, что он использовал gnome-keyring. Я снова предполагаю, что gnome-keyring не установлен на сервере Ubuntu, и именно поэтому есть проблема. В настоящее время я могу проверить вещи, но я получаю предупреждение, что могу хранить только незашифрованный пароль. Смотрите ссылку, которую я дал для более подробной информации. Спасибо.
Энди
Я разъяснил объяснение выше, hth.
Энди
Я люблю , чтобы использовать ~ / .authinfo.gpg со стандартным форматом Netrc для SVN, и имею GPG обрабатывать шифрование, но , к сожалению , это то , что кажется , что это было бы потребовать немного больше настроек , чем решение EncFS. Похоже, что svn не допускает произвольных пользовательских хранилищ паролей.
отбойный молоток