Come posso fornire una password SSH a SVN sulla riga di comando?


8

Nel mio caso, voglio fare un checkout SVN:

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

Tuttavia, voglio avere la password in quella riga, in modo che non compaia.


1
Solo un rapido avviso: il tuo nome utente e la password saranno esposti a TUTTI con l'accesso a quella macchina. Solo un semplice comando "ps -elf" mostrerà l'intera riga di comando. In generale, questa non è una buona idea per quanto riguarda la sicurezza, e perché svn e strumenti come questo richiedono password. Non è che non puoi farlo se controlli chi ha accesso al sistema, semplicemente non vuoi che le persone pensino che dovrebbero farlo in generale.
Jared

Risposte:


12

svn co svn + ssh: // nomeutente: password@10.106.191.164/home/svn/shproject


+1 per rispondere alla domanda e non solo fornire alternative (per quanto valide possano essere).
briealeida

@briealeida - Vorrei solo che funzionasse: secondo il test nel mio inserisci qui sotto , sembra che non funzioni, come appare comunque una richiesta di password; lo stesso post contiene una soluzione con sshpass (che funziona per me).
sdaau

Come detto sopra, questo in realtà non funziona.
Jonny

Espanso: probabilmente funzionerebbe fintanto che ssh non chiedesse una password, cosa che sarebbe nella maggior parte dei casi.
Jonny

16

Dato che stai utilizzando SSH, il modo migliore è utilizzare una chiave pubblica per l'autorizzazione, che salva completamente la necessità di una password.

È possibile trovare una guida per la creazione e l'installazione delle chiavi Qui .


Certo, se vuoi che la tua chiave sia veramente sicura, dovresti dargli una passphrase. : /
Rob

7

Infinitamente migliore è generare una coppia di chiavi. Come tuo utente locale:

$ ssh-keygen -t rsa

(accetta tutti i valori predefiniti)

Quindi prendi il contenuto di .ssh / id_rsa.pub e aggiungilo sul server remoto a .ssh / authorized_keys Assicurati che tutto sia incollato nella stessa riga. Assicurati inoltre che i permessi della directory .ssh siano 600.

Quindi dovresti essere in grado di ssh senza che venga richiesta una password.


"I permessi di ~ / .ssh sul server dovrebbero essere 700. Il file ~ / .ssh / authorized_keys (sul server) dovrebbe avere una modalità di 600. Le autorizzazioni della chiave (privata) sul lato client dovrebbe essere 600. " askubuntu.com/a/46425
Jonny

6

Invece di usare una password potresti voler dare un'occhiata a una coppia di chiavi privata / pubblica e far sì che ssh lo usi. la maggior parte delle distribuzioni di Linux sono dotate di comandi facili da usare per creare una tale coppia. ciò richiederebbe comunque l'accesso al lato server (una volta) per depositare il file della chiave pubblica nel file ~ / .ssh / authorized_keys dell'utente.


3

Bene, io fare voglio inserire una password - non mi piace affidarmi alla mia password salvata da qualche parte; tuttavia, voglio entrarvi una volta per set di comandi svn + ssh; e spesso, vuoi solo farne uno svn checkout - e devono comunque inserire tonnellate di password. In tal caso, mi piacerebbe digitare una password solo una volta.

Quindi, solo risposte di @Boinst e @Marius erano rilevanti per il mio caso d'uso; sfortunatamente, non hanno aiutato, dato che non riuscivo a farli funzionare. Mi chiedo se gli autori dei post stessi abbiano provato i comandi prima di postarli, poiché ora non riesco a immaginare come potrebbero funzionare - ecco un test che ho fatto localmente sul mio Ubuntu 10.04 PC (e mi interrompo con Ctrl-C, ogni volta che vedo il appare la password):

$ 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

Fino a --username/--password sopra svn la linea di comando è interessata - non importa con svn+ssh, perché è ssh chiedendo, no svn:

svn - Subversion che ignora le opzioni "--password" e "--username" - Stack Overflow

Il prompt che stai ottenendo non somiglia a Subversion che ti chiede una password, sembra che ssh chieda una password.

Inoltre, come mostra il registro, ssh stesso non accetta " username:password@... "nell'URL - e così neanche svn. Perché è accettabile utilizzare solo il nome utente nell'URL in svn, è probabilmente spiegato in ~/.subversion/config:

### (Se l'URL include un nome utente, sarà il nome host
### passato all'agente tunnel come @.)

Avviso Niente è detto <user>:<pass>@<hostname>.

Ora, grazie alla pagina Subversion su SVN + SSH su Debian , Ho finalmente capito che c'è un SVN_SSH variabile d'ambiente utilizzata in ~/.subversion/config per il tunnel ssh (immagino); e questo apre finalmente la possibilità di usare il programma sshpass per gestire la password in modo unidirezionale:

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

Bene, almeno sono felice di aver finalmente trovato una soluzione che funziona per me - spero che questo aiuti anche qualcun altro
Saluti!


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

Penso che usando sshpass (in Linux) è il modo migliore per ottenere questo.

Installa sshpass

$ sudo apt-get install sshpass

Imposta la variabile di ambiente temporanea

$ export SSHPASS=*yourpass*

Modifica il file di configurazione svn

$ nano ~/.subversion/config

Infine commenta aggiungere sshpass -e alla linea ssh, prima del ssh comando

ssh = $SVN_SSH sshpass -e ssh -q -o ControlMaster=no
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.