Jak mogę podać hasło SSH do SVN w wierszu poleceń?

8

W moim przypadku chcę zrobić kasę SVN:

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

Chcę jednak mieć hasło w tej jednej linii, aby się nie wyświetlało.

Alex
źródło
1
Krótkie ostrzeżenie - Twoja nazwa użytkownika i hasło zostaną ujawnione KAŻDEMU z dostępem do tego urządzenia. Po prostu proste polecenie „ps -elf” wyświetli pełną linię poleceń. Zasadniczo nie jest to dobry pomysł ze względów bezpieczeństwa i dlaczego svn i podobne narzędzia monitują o hasła. Nie znaczy to, że nie możesz tego zrobić, jeśli kontrolujesz, kto ma dostęp do systemu, po prostu nie chcę, aby ludzie myśleli, że powinni to zrobić w ogóle.
Jared

Odpowiedzi:

12

svn co svn + ssh: // nazwa użytkownika: hasł[email protected]/home/svn/shproject

Marius
źródło
+1 za udzielenie odpowiedzi na pytanie, a nie tylko zapewnienie alternatywnych rozwiązań (choć mogą być warte).
briealeida
@briealeida - po prostu chciałbym, żeby działało: zgodnie z testem w moim poście poniżej wydaje się, że nie działa, ponieważ i tak pojawia się monit o hasło; ten sam post zawiera rozwiązanie sshpass(które działa dla mnie).
sdaau
Jak powiedziano powyżej, to tak naprawdę nie działa.
Jonny,
Rozszerzone: prawdopodobnie działałoby tak długo, jak ssh nie prosi o hasło, co w większości przypadków.
Jonny
16

Biorąc pod uwagę, że używasz SSH, preferowanym sposobem jest użycie klucza publicznego do autoryzacji, co całkowicie eliminuje potrzebę hasła.

Przewodnik dotyczący tworzenia i instalowania kluczy można znaleźć tutaj .

abyx
źródło
Oczywiście, jeśli chcesz, aby klucz był naprawdę bezpieczny, powinieneś podać mu hasło. : /
Rob
7

Nieskończenie lepiej jest wygenerować parę kluczy. Jako lokalny użytkownik:

$ ssh-keygen -t rsa

(zaakceptuj wszystkie wartości domyślne)

Następnie weź zawartość .ssh / id_rsa.pub i dodaj ją na zdalnym serwerze do .ssh / Author_keys. Upewnij się, że wszystko zostało wklejone do tej samej linii. Upewnij się także, że uprawnienia do katalogu .ssh wynoszą 600.

Powinieneś być w stanie ssh bez pytania o hasło.


źródło
„Uprawnienia ~ / .ssh na serwerze powinny wynosić 700. Plik ~ / .ssh / uprawniony_klucz (na serwerze) powinien mieć tryb 600. Uprawnienia klucza (prywatnego) po stronie klienta powinien wynosić 600. ” askubuntu.com/a/46425
Jonny
6

Zamiast używać hasła, możesz rzucić okiem na parę kluczy prywatny / publiczny i użyć ssh. większość dystrybucji linuksa zawiera łatwe w użyciu polecenia, aby stworzyć taką parę. wymagałoby to jednak dostępu po stronie serwera (jeden raz), aby zdeponować plik klucza publicznego w pliku ~ / .ssh / autoryzowane_kluczy użytkownika.

Daniel Schneller
źródło
3

Cóż, ja nie chcę, aby wprowadzić hasło - Nie lubię polegać na moim hasło zapisane jest gdzieś; chcę jednak wprowadzić go raz na zestaw poleceń svn + ssh; i często po prostu chcesz to zrobić svn checkout- i tak i tak musisz wprowadzić mnóstwo haseł. W takim przypadku chciałbym wpisać hasło tylko raz.

Tak więc tylko odpowiedzi @Boinst i @Marius były istotne dla mojego przypadku użycia; niestety nie pomogły, ponieważ nie mogłem ich zmusić do pracy. Zastanawiam się, czy sami autorzy postów wypróbowali polecenia przed ich opublikowaniem, ponieważ teraz nie wyobrażam sobie, jak mogłyby one działać - oto test, który zrobiłem lokalnie na moim Ubuntu 10.04 PC (i łamię się przy pomocy Ctrl-C, za każdym razem, gdy widzę pojawia się monit o hasło):

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

$ cd /tmp
$ svnadmin create myrepo
$ read -p 'ssh [email protected]? ' PASS
ssh [email protected]? [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:[email protected]
myself:[email protected]'s password: ^C

# svn - with just username, as expected:

$ svn co svn+ssh://[email protected]/tmp/myrepo myrepo-wc
[email protected]'s password: ^C
svn: Network connection closed unexpectedly

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

$ svn co svn+ssh://myself:[email protected]/tmp/myrepo myrepo-wc
myself:[email protected]'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://[email protected]/tmp/myrepo --non-interactive --trust-server-cert --username myself --password $PASS --no-auth-cache
[email protected]'s password: ^C
svn: Network connection closed unexpectedly

Jeśli chodzi --username/--passwordo svnwiersz poleceń - to nie ma znaczenia svn+ssh, ponieważ sshpyta, a nie svn:

svn - Subversion ignoruje opcje „--password” i „--username” - Przepełnienie stosu

Wyświetlany monit nie wygląda na to, że Subversion prosi o hasło, wygląda na to, że ssh pyta o hasło.

Dodatkowo, jak pokazuje dziennik, sshsam nie akceptuje znaku „ username:password@...” w adresie URL - i też nie svn. Dlaczego dopuszczalne jest używanie tylko nazwy użytkownika w adresie URL w svn, prawdopodobnie wyjaśniono w ~/.subversion/config:

### (Jeśli adres URL zawiera nazwę użytkownika, nazwa hosta zostanie
### przekazana agentowi tunelowemu jako @.)

Zauważ, że nic nie zostało powiedziane <user>:<pass>@<hostname>.

Teraz, dzięki stronie Subversion nad SVN + SSH na Debianie , w końcu zdałem sobie sprawę, że SVN_SSHw ~/.subversion/configtunelu ssh używana jest zmienna środowiskowa ; i to wreszcie otwiera możliwość użycia programu sshpassdo obsługi hasła w taki sposób:

$ SSHPASS=$PASS SVN_SSH="sshpass -e ssh" svn co svn+ssh://[email protected]/tmp/myrepo myrepo-wc
Checked out revision 0.

Przynajmniej cieszę się, że w końcu znalazłem rozwiązanie, które działa dla mnie - mam nadzieję, że pomoże to również komuś innemu,
zdrowie!

sdaau
źródło
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
źródło
1

Myślę, że najlepszym sposobem na uzyskanie tego jest użycie sshpass (w Linuksie).

Zainstaluj sshpass

$ sudo apt-get install sshpass

Ustaw tymczasową zmienną środowiskową

$ export SSHPASS=*yourpass*

Edytuj plik konfiguracyjny svn

$ nano ~/.subversion/config

Na koniec dodaj komentarz sshpass -edo wiersza ssh przed sshpoleceniem

ssh = $SVN_SSH sshpass -e ssh -q -o ControlMaster=no
Francesco
źródło