Як я можу надати SSH пароль для SVN в командному рядку?


8

У моєму випадку я хочу зробити замовлення на SVN:

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

Однак я хочу мати пароль у цьому рядку, щоб він не спливав.


1
Просто швидке попередження - ваше ім’я користувача та пароль будуть піддані ВСІМ, хто має доступ до цієї машини. Просто проста команда "ps -elf" покаже повний командний рядок. Взагалі це не дуже гарна ідея безпеки, і чому svn та такі інструменти підказують паролі. Не те, що ви не можете цього зробити, якщо ви контролюєте, хто має доступ до системи, просто не хочу, щоб люди думали, що вони повинні робити це взагалі.
Джаред

Відповіді:


12

svn co svn + ssh: // ім'я користувача: пароль@10.106.191.164/home/svn/shproject


+1, щоб відповісти на запитання, а не просто запропонувати альтернативи (хоч вони й є).
briealeida

@briealeida - я просто хочу, щоб це спрацювало: згідно з тестом у моїй посаді нижче , схоже, це не працює, оскільки підказки про пароль з’являються у будь-якому випадку; той самий пост містить рішення з sshpass(яке для мене працює).
sdaau

Як було сказано вище, це насправді не працює.
Джоні

Розширено: це, швидше за все, спрацює до тих пір, поки ssh не запитає пароль, що було б у більшості випадків.
Джоні

16

Зважаючи на те, що ви використовуєте SSH, кращим способом є використання відкритого ключа для авторизації, який повністю економить необхідність пароля.

Посібник зі створення та встановлення ключів можна знайти тут .


Звичайно, якщо ви хочете, щоб ваш ключ був справді захищеним, вам слід надати йому пропускну фразу. : /
Роб

7

Нескінченно краще - створити ключ. Як ваш місцевий користувач:

$ ssh-keygen -t rsa

(прийняти всі типові настройки)

Потім візьміть вміст .ssh / id_rsa.pub і додайте його на віддалений сервер до .ssh / pooblasti_keys Будьте впевнені, що він вставлений у один рядок. Також будьте впевнені, що дозволи в каталозі .ssh дорівнюють 600.

Тоді ви повинні мати змогу ssh, не запрошуючи пароль.


"Дозволи на ~ / .ssh на сервері повинні бути 700. Файл ~ / .ssh / санкціонований_кейс (на сервері) повинен мати режим 600. Дозволи дозволу (приватного) ключа на стороні клієнта має бути 600. " askubuntu.com/a/46425
Jonny

6

Замість використання пароля ви можете ознайомитись із парою приватного / відкритого ключа та використовувати ssh. Більшість дистрибутивів Linux мають прості у використанні команди для створення такої пари. однак це вимагатиме доступу з боку сервера (один раз) для здачі файлу відкритого ключа у файл користувача / /.


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.

Ну, принаймні, я радий, що нарешті знайшов рішення, яке працює для мене - сподіваюсь, це допомагає ще комусь,
Ура!


2
svn co svn+ssh://10.106.191.164/home/svn/shproject --non-interactive --trust-server-cert --username <username> --password <password> --no-auth-cache


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
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.