Как я могу предоставить пароль SSH для SVN в командной строке?

8

В моем случае я хочу сделать проверку SVN:

svn co svn+ssh://10.106.191.164/home/svn/shproject

Однако я хочу, чтобы пароль был в одной строке, чтобы он не всплывал.

Alex
источник
1
Просто быстрое предупреждение - ваше имя пользователя и пароль будут доступны любому, кто имеет доступ к этому компьютеру. Просто простая команда "ps -elf" покажет полную командную строку. В общем, это не очень хорошая идея с точки зрения безопасности, и поэтому svn и подобные инструменты запрашивают пароли. Не то, чтобы вы не могли этого сделать, если вы контролируете, кто имеет доступ к системе, просто не хотите, чтобы люди думали, что они должны делать это в целом.
Джаред

Ответы:

12

svn co svn + ssh: // имя пользователя: пароль@10.106.191.164/home/svn/shproject

Marius
источник
+1 за ответ на вопрос, а не только за предоставление альтернатив (хотя они и заслуживают внимания).
Briealeida
@briealeida - я просто хотел бы, чтобы это сработало: согласно тесту в моем посте ниже , кажется, что оно не работает, так как в любом случае появляется запрос пароля; тот же пост содержит решение с sshpass(который работает для меня).
sdaau
Как сказано выше, это на самом деле не работает.
Джонни
Расширен: он, вероятно, будет работать до тех пор, пока ssh не запрашивает пароль, как в большинстве случаев.
Джонни
16

Учитывая, что вы используете SSH, предпочтительным способом является использование открытого ключа для авторизации, что полностью избавляет от необходимости ввода пароля.

Руководство по созданию и установке ключей можно найти здесь .

abyx
источник
Конечно, если вы хотите, чтобы ваш ключ был действительно безопасным, вы должны дать ему фразу-пароль. : /
Роб
7

Бесконечно лучше создать пару ключей. Как ваш локальный пользователь:

$ ssh-keygen -t rsa

(принять все значения по умолчанию)

Затем возьмите содержимое .ssh / id_rsa.pub и добавьте его на удаленном сервере в .ssh / authorized_keys. Убедитесь, что оно вставлено в одну строку. Также убедитесь, что разрешения для каталога .ssh равны 600.

Тогда вы сможете использовать ssh без запроса пароля.


источник
«Разрешения ~ / .ssh на сервере должны быть 700. Предполагается, что файл ~ / .ssh / authorized_keys (на сервере) имеет режим 600. Разрешения (частного) ключа на стороне клиента должно быть 600 ". askubuntu.com/a/46425
Джонни
6

Вместо того, чтобы использовать пароль, вы можете захотеть взглянуть на пару секретный / открытый ключ и использовать ssh. Большинство дистрибутивов Linux поставляются с простыми в использовании командами для создания такой пары. однако для этого потребуется доступ на серверную сторону (один раз) для размещения файла открытого ключа в файле ~ / .ssh / authorized_keys вашего пользователя.

Даниэль Шнеллер
источник
3

Ну, я действительно хочу , чтобы ввести пароль - мне не нравится полагаться на мой пароль сохраняются где - то; тем не менее, я хочу ввести его один раз для набора команд svn + ssh; и часто, вы просто хотите сделать один svn checkout- и все равно придется вводить тонны паролей. Именно в таком случае я бы хотел ввести пароль только один раз.

Таким образом, только ответы @Boinst и @Marius были актуальны для моего варианта использования; к сожалению, они не помогли, так как я не мог заставить их работать. Интересно, сами авторы постов опробовали команды перед их публикацией, так как теперь я не представляю, как они могут работать - вот тест, который я провел локально на своем компьютере с Ubuntu 10.04 (и я ломаюсь с помощью Ctrl-C, каждый раз, когда вижу появится запрос пароля):

$ svn --version | head -1
svn, version 1.6.6 (r40053)

$ cd /tmp
$ svnadmin create myrepo
$ read -p 'ssh myself@127.0.0.1? ' PASS
ssh myself@127.0.0.1? [type _PASSWORD_, press ENTER]

## trying first with https://superuser.com/a/71479/39752 
# (specify in URL user:pass separated by colon)

## plain ssh - asks for password anyway:

$ ssh myself:$PASS@127.0.0.1
myself:_PASSWORD_@127.0.0.1's password: ^C

# svn - with just username, as expected:

$ svn co svn+ssh://myself@127.0.0.1/tmp/myrepo myrepo-wc
myself@127.0.0.1's password: ^C
svn: Network connection closed unexpectedly

# svn - with password added to URL, asks for password anyway:

$ svn co svn+ssh://myself:$PASS@127.0.0.1/tmp/myrepo myrepo-wc
myself:_PASSWORD_@127.0.0.1's password: ^C
svn: Network connection closed unexpectedly

# trying then with https://superuser.com/a/380426/39752, https://superuser.com/a/327822/39752
# (--non-interactive and --username/--password on command line)

# svn - asks for password anyway:

$ svn co svn+ssh://myself@127.0.0.1/tmp/myrepo --non-interactive --trust-server-cert --username myself --password $PASS --no-auth-cache
myself@127.0.0.1's password: ^C
svn: Network connection closed unexpectedly

Что касается --username/--passwordв svnкомандной строке обеспокоен - это не имеет значения с svn+ssh, потому что это sshпросят, а не svn:

svn - Subversion игнорирует опции "--password" и "--username" - Переполнение стека

Приглашение, которое вы получаете, не похоже на Subversion, запрашивающую пароль, похоже на ssh, запрашивающее пароль.

Кроме того, как показывает журнал, sshсам по себе не принимает " username:password@..." в URL-адресе - и так не делает svn. Почему в URL-адресе допустимо использовать только имя пользователя svn, вероятно, объясняется в ~/.subversion/config:

### (Если URL содержит имя пользователя, то имя хоста будет
### передано агенту туннеля как @.)

Заметьте, ничего не сказано <user>:<pass>@<hostname>.

Теперь, благодаря странице Subversion поверх SVN + SSH в Debian , я наконец понял, что есть SVN_SSHпеременная окружения, используемая ~/.subversion/configдля (я полагаю) туннеля ssh; и это в конечном итоге открывает возможность использовать программу sshpassдля обработки пароля таким способом:

$ SSHPASS=$PASS SVN_SSH="sshpass -e ssh" svn co svn+ssh://myself@127.0.0.1/tmp/myrepo myrepo-wc
Checked out revision 0.

Ну, по крайней мере, я рад, что наконец нашел решение, которое работает для меня - надеюсь, это поможет кому-то еще,
ура!

sdaau
источник
2
svn co svn+ssh://10.106.191.164/home/svn/shproject --non-interactive --trust-server-cert --username <username> --password <password> --no-auth-cache
Boinst
источник
1

Я думаю, что использование sshpass (в Linux) - лучший способ получить это.

Установить sshpass

$ sudo apt-get install sshpass

Установите временную переменную среды

$ export SSHPASS=*yourpass*

Отредактируйте конфигурационный файл SVN

$ nano ~/.subversion/config

Наконец закомментируйте добавить sshpass -eв строку ssh перед sshкомандой

ssh = $SVN_SSH sshpass -e ssh -q -o ControlMaster=no
Francesco
источник