Comment puis-je fournir un mot de passe SSH à SVN sur la ligne de commande?


8

Dans mon cas, je veux faire un paiement SVN:

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

Cependant, je veux avoir le mot de passe sur cette seule ligne, afin qu'il ne s'affiche pas.


1
Juste un petit avertissement - votre nom d'utilisateur et votre mot de passe seront exposés à TOUT LE MONDE ayant accès à cette machine. Une simple commande "ps -elf" affichera la ligne de commande complète. En général, ce n'est pas une bonne idée en termes de sécurité, et pourquoi svn et des outils comme celui-ci demandent des mots de passe. Non pas que vous ne puissiez pas le faire si vous contrôlez qui a accès au système, mais ne voulez pas que les gens pensent qu'ils devraient le faire en général.
Jared

Réponses:


12

svn co svn + ssh: // nom d'utilisateur: password@10.106.191.164/home/svn/shproject


+1 pour avoir répondu à la question et pas seulement pour fournir des alternatives (dignes qu'elles soient).
briealeida

@briealeida - Je souhaite juste que cela fonctionne: selon le test dans mon post ci - dessous , il semble que cela ne fonctionne pas, car une invite de mot de passe apparaît de toute façon; le même article contient une solution avec sshpass(qui fonctionne pour moi).
sdaau

Comme indiqué ci-dessus, cela ne fonctionne pas réellement.
Jonny

Développé: cela fonctionnerait probablement aussi longtemps que ssh ne demanderait pas de mot de passe, ce qu'il ferait dans la plupart des cas.
Jonny

16

Étant donné que vous utilisez SSH, la méthode préférée consiste à utiliser une clé publique pour l'autorisation, ce qui évite complètement la nécessité d'un mot de passe.

Un guide pour créer et installer les clés peut être trouvé ici .


Bien sûr, si vous voulez que votre clé soit vraiment sécurisée, vous devez lui donner une phrase de passe. : /
Rob

7

Il est infiniment préférable de générer une paire de clés. En tant qu'utilisateur local:

$ ssh-keygen -t rsa

(accepter toutes les valeurs par défaut)

Prenez ensuite le contenu de .ssh / id_rsa.pub et ajoutez-le sur le serveur distant à .ssh / authorized_keys Assurez-vous qu'il est tout collé sur la même ligne. Assurez-vous également que les autorisations du répertoire .ssh sont 600.

Ensuite, vous devriez pouvoir ssh sans être invité à entrer un mot de passe.


"Les autorisations de ~ / .ssh sur le serveur doivent être de 700. Le fichier ~ / .ssh / authorized_keys (sur le serveur) est censé avoir un mode de 600. Les autorisations de la clé (privée) côté client devrait être 600. " askubuntu.com/a/46425
Jonny

6

Au lieu d'utiliser un mot de passe, vous voudrez peut-être jeter un œil à une paire de clés privée / publique et demander à ssh de l'utiliser. la plupart des distributions linux sont livrées avec des commandes faciles à utiliser pour créer une telle paire. cela nécessiterait cependant un accès côté serveur (une fois) pour déposer le fichier de clé publique dans le fichier ~ / .ssh / authorized_keys de votre utilisateur.


3

Eh bien, je ne veux entrer un mot de passe - Je ne aime pas compter sur mon mot de passe d' être sauvé quelque part; cependant, je veux l'entrer une fois par ensemble de commandes svn + ssh; et souvent, vous voulez juste en faire un svn checkout- et vous devez quand même entrer des tonnes de mots de passe. C'est dans un tel cas que je voudrais taper un mot de passe une seule fois.

Ainsi, seules les réponses de @Boinst et @Marius étaient pertinentes pour mon cas d'utilisation; malheureusement, ils n'ont pas aidé, car je n'ai pas pu les faire travailler. Je me demande si les auteurs des articles eux-mêmes ont essayé les commandes avant de les publier, car maintenant je ne peux pas imaginer comment ils pourraient fonctionner - voici un test que j'ai fait localement sur mon PC Ubuntu 10.04 (et je romps avec Ctrl-C, chaque fois que je vois le mot de passe apparaît):

$ 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

En ce qui concerne --username/--passwordle svnligne de commande est concernée - qui n'a pas d' importance avec svn+ssh, parce qu'il est de sshdemander, non svn:

svn - Subversion ignorant les options "--password" et "--username" - Stack Overflow

L'invite que vous obtenez ne ressemble pas à Subversion vous demandant un mot de passe, elle ressemble à ssh demandant un mot de passe.

De plus, comme le journal le montre, sshlui-même n'accepte pas " username:password@..." dans l'URL - et donc non plus svn. Pourquoi il est acceptable d'utiliser uniquement le nom d'utilisateur dans l'URL dans svn, est probablement expliqué dans ~/.subversion/config:

### (Si l'URL comprend un nom d'utilisateur, le nom d'hôte sera
### transmis à l'agent de tunnel en tant que @.)

Remarquez que rien n'est dit <user>:<pass>@<hostname>.

Maintenant, grâce à la page Subversion sur SVN + SSH sur Debian , j'ai finalement réalisé qu'il y avait une SVN_SSHvariable d'environnement utilisée ~/.subversion/configpour (je suppose) le tunnel ssh; et cela ouvre enfin la possibilité d'utiliser le programme sshpasspour gérer le mot de passe d'une manière à sens unique:

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

Eh bien, au moins je suis content d'avoir enfin trouvé une solution qui fonctionne pour moi - j'espère que cela aide quelqu'un d'autre aussi,
Cheers!


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

Je pense que l'utilisation de sshpass (sous Linux) est le meilleur moyen d'y parvenir.

Installer sshpass

$ sudo apt-get install sshpass

Définissez la variable d'environnement temporaire

$ export SSHPASS=*yourpass*

Modifier le fichier de configuration svn

$ nano ~/.subversion/config

Enfin commentez ajouter sshpass -eà la ligne ssh, avant la sshcommande

ssh = $SVN_SSH sshpass -e ssh -q -o ControlMaster=no
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.