Wie kann ich SVN in der Befehlszeile ein SSH-Passwort geben?

8

In meinem Fall möchte ich eine SVN-Prüfung durchführen:

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

Ich möchte jedoch das Passwort in dieser einen Zeile haben, damit es nicht erscheint.

Alex
quelle
1
Nur eine kurze Warnung - Ihr Benutzername und Ihr Passwort werden JEDEM zugänglich gemacht, der Zugriff auf diesen Computer hat. Nur ein einfacher "ps -elf" -Befehl zeigt die vollständige Befehlszeile an. Im Allgemeinen ist dies aus Sicherheitsgründen keine gute Idee, und warum SVN und ähnliche Tools zur Eingabe von Kennwörtern auffordern. Nicht, dass Sie dies nicht tun können, wenn Sie steuern, wer Zugriff auf das System hat. Sie möchten nur nicht, dass die Leute glauben, sie sollten dies im Allgemeinen tun.
Jared

Antworten:

12

svn co svn + ssh: // Benutzername: [email protected]/home/svn/shproject

Marius
quelle
+1 für die Beantwortung der Frage und nicht nur für die Bereitstellung von Alternativen (auch wenn sie würdig sind).
Briealeida
@briealeida - Ich wünschte nur, es würde funktionieren: Laut dem Test in meinem Beitrag unten scheint es nicht zu funktionieren, da sowieso eine Passwortabfrage angezeigt wird. Der gleiche Beitrag enthält eine Lösung mit sshpass(was für mich funktioniert).
Sdaau
Wie oben gesagt, funktioniert dies nicht wirklich.
Jonny
Erweitert: Es würde wahrscheinlich funktionieren, solange ssh nicht nach einem Passwort fragt, was in den meisten Fällen der Fall wäre.
Jonny
16

Da Sie SSH verwenden, ist die bevorzugte Methode die Verwendung eines öffentlichen Schlüssels für die Autorisierung, wodurch die Notwendigkeit eines Kennworts vollständig erspart wird.

Eine Anleitung zum Erstellen und Installieren der Schlüssel finden Sie hier .

Abyx
quelle
Wenn Sie möchten, dass Ihr Schlüssel wirklich sicher ist, sollten Sie ihm natürlich eine Passphrase geben. : /
Rob
7

Unendlich besser ist es, ein Schlüsselpaar zu generieren. Als Ihr lokaler Benutzer:

$ ssh-keygen -t rsa

(Akzeptiere alle Standardeinstellungen)

Nehmen Sie dann den Inhalt von .ssh / id_rsa.pub und fügen Sie ihn auf dem Remote-Server zu .ssh / authorized_keys hinzu. Stellen Sie sicher, dass alles in dieselbe Zeile eingefügt ist. Stellen Sie außerdem sicher, dass die Berechtigungen des .ssh-Verzeichnisses 600 sind.

Dann sollten Sie in der Lage sein, ssh ohne Aufforderung zur Eingabe eines Passworts.


quelle
"Die Berechtigungen von ~ / .ssh auf dem Server sollten 700 sein. Die Datei ~ / .ssh / authorized_keys (auf dem Server) soll einen Modus von 600 haben. Die Berechtigungen des (privaten) Schlüssels auf der Clientseite sollte 600 sein. " askubuntu.com/a/46425
Jonny
6

Anstatt ein Passwort zu verwenden, sollten Sie sich ein privates / öffentliches Schlüsselpaar ansehen und dieses von ssh verwenden lassen. Die meisten Linux-Distributionen enthalten einfach zu verwendende Befehle, um ein solches Paar zu erstellen. Dies würde jedoch (einmal) Zugriff auf die Serverseite erfordern, um die Datei mit dem öffentlichen Schlüssel in der Datei ~ / .ssh / authorized_keys Ihres Benutzers abzulegen.

Daniel Schneller
quelle
3

Nun, ich tun will , ein Passwort einzugeben - ich mag sie nicht auf meinem Passwort verläßt irgendwo gespeichert worden ; Ich möchte es jedoch einmal pro Satz von svn + ssh-Befehlen eingeben. und oft möchten Sie nur eines tun svn checkout- und müssen trotzdem Tonnen von Passwörtern eingeben. In einem solchen Fall möchte ich ein Passwort nur einmal eingeben.

Daher waren nur die Antworten von @Boinst und @Marius für meinen Anwendungsfall relevant. Leider haben sie nicht geholfen, da ich sie nicht zur Arbeit bringen konnte. Ich frage mich, ob die Post-Autoren die Befehle selbst ausprobiert haben, bevor sie veröffentlicht wurden, da ich mir jetzt nicht vorstellen kann, wie sie funktionieren könnten - hier ist ein Test, den ich lokal auf meinem Ubuntu 10.04-PC durchgeführt habe (und ich breche jedes Mal mit Strg-C, wenn ich das sehe Passwortabfrage erscheint):

$ 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

Soweit --username/--passwordauf svnKommandozeile betrifft - das macht nichts mit svn+ssh, weil es zu sshfragen, nicht svn:

svn - Subversion ignoriert die Optionen "--password" und "--username" - Stapelüberlauf

Die Eingabeaufforderung sieht nicht so aus, als würde Subversion Sie nach einem Passwort fragen. Es sieht so aus, als würde ssh nach einem Passwort fragen.

Wie das Protokoll zeigt, sshakzeptiert es selbst kein " username:password@..." in der URL - und auch nicht svn. Warum es akzeptabel ist, nur den Benutzernamen in der URL in zu verwenden svn, wird wahrscheinlich erklärt in ~/.subversion/config:

### (Wenn die URL einen Benutzernamen enthält, wird der Hostname
als @ an den Tunnelagenten übergeben.)

Beachten Sie, dass nichts darüber gesagt wird <user>:<pass>@<hostname>.

Dank der Seite Subversion über SVN + SSH auf Debian wurde mir endlich klar, dass es eine SVN_SSHUmgebungsvariable gibt, die ~/.subversion/configfür den (ich denke) ssh-Tunnel verwendet wird. und das eröffnet schließlich die Möglichkeit, das Programm sshpasszu verwenden, um das Passwort auf eine solche Weise zu behandeln:

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

Zumindest bin ich froh, dass ich endlich eine Lösung gefunden habe, die für mich funktioniert - hoffe, das hilft auch jemand anderem,
Prost!

sdaau
quelle
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
quelle
1

Ich denke, die Verwendung von sshpass (unter Linux) ist der beste Weg, dies zu erreichen.

Installieren Sie sshpass

$ sudo apt-get install sshpass

Legen Sie die temporäre Umgebungsvariable fest

$ export SSHPASS=*yourpass*

Bearbeiten Sie die SVN-Konfigurationsdatei

$ nano ~/.subversion/config

Zum Schluss kommentieren Sie add sshpass -eto ssh line vor dem sshBefehl

ssh = $SVN_SSH sshpass -e ssh -q -o ControlMaster=no
Francesco
quelle