Cómo guardar la contraseña al usar Subversion desde la consola

106

Me preguntaba si hay alguna forma de guardar mi contraseña de Subversion al realizar svnoperaciones desde la consola. La consola es la única opción que tengo. Cuando intento realizar cualquier acción de Subversion, por ejemplo svn commit, me solicita la contraseña de la cuenta cada vez. ¿Hay alguna forma de guardar esta contraseña de alguna manera para no tener que volver a escribirla cada vez?

john mcdonald
fuente
Consulte también no puedo hacer que svn almacene la contraseña, aunque la configuración esté configurada para permitir la resolución de problemas en caso de que la respuesta aceptada no funcione.
maxschlepzig

Respuestas:

110

En ~/.subversion/config, probablemente lo hayas hecho store-passwords = no. Cámbielo a yes(o simplemente coméntelo porque el valor predeterminado es sí), y la próxima vez que le dé a Subversion su contraseña, debería guardarla.

Es posible que desee asegurarse de que el propietario y los permisos de ~/.subversion/configsean correctos (sin acceso público o de grupo; 600).

Michael Mrozek
fuente
No puedo encontrar este archivo en formato Red Hat Linux 2.6.18. ¿Alguna idea de dónde podría estar?
Ish
3
@Ish Es posible que deba hacerlo si aún no existe; Creo que SVN se ve allí en todas las distribuciones
Michael Mrozek
5
+1, después de crear el /etc/subversion/configsistema de archivos , funciona como se esperaba. Gracias
Ish
@IshKumar ¡Gracias! ¡Trabajó para mí la primera vez!
Anil
15
@Seven Mejor aún, solo escribe una nueva respuesta que esté más actualizada. (La store-passwordsopción en configahora está obsoleta, de acuerdo con algunos comentarios predeterminados que encontré en mi configarchivo; ha sido reemplazada por la misma opción en servers.)
Kyle Strand
54

Depende del protocolo que estés usando. Si está utilizando SVN + SSH, el cliente SVN no puede guardar su contraseña porque nunca la toca; el cliente SSH se la solicita directamente. En este caso, puede usar una clave SSH y ssh-agent para evitar los avisos constantes. Si está utilizando el protocolo svnserve o HTTP (S), entonces el cliente SSH está manejando su contraseña y puede guardarla.

nadie
fuente
4
+1 Tengo este problema exacto: svn + ssh siempre, siempre me pide una contraseña. Aparte de compartir una clave pública, ¿hay alguna forma de evitar esto? Probé ssh-agent, pero no tuve suerte.
Michael Mikowski
@MichaelMikowski Parece que la contraseña SSH no se puede guardar en la configuración para el inicio de sesión automático. Puede crear un nuevo par de claves para él, almacenar la ubicación de la clave privada en .ssh/config, agregar la clave pública al servidor SVN.
lk_vc
33

Intente borrar su .subversioncarpeta en su directorio de inicio e intente confirmar nuevamente. Debería pedirle su contraseña y luego preguntarle si desea guardar la contraseña.

Earlz
fuente
¡Te refieres a la carpeta .subversion!
Khmarbaise
3
Yo tuve el mismo problema. No tenía ninguna de las configuraciones de contraseña de la tienda establecida en "no" en mi archivo de configuración o servidores, pero esto funcionó.
Bob B
1
Estaba tratando de cambiar todo tipo de configuraciones sin éxito. Lo único que finalmente resolvió este problema fue eliminar la carpeta .subversion.
Michael Noyb
Esto funcionó para mí también. Curiosamente, almacenó la contraseña dentro de la carpeta ~ / .subversion / auth / svn.simple para mí.
Chetan
Esto también lo hizo por mí, pero miré para ver cuál era la diferencia, y resultó ser la propiedad del directorio .subversion y sus archivos. Después de transferir datos desde otra máquina, este directorio de alguna manera terminó siendo propiedad de root, cuando debería ser de mi propiedad. Eliminar el directorio y dejar que svn lo recreara solucionó el problema (pero chown probablemente lo habría solucionado igualmente).
Joe Strout
19

Tuve que editar ~/.subversion/servers. Configuré store-plaintext-passwords = yes(no era antes). Eso hizo el truco. Sin embargo, podría considerarse inseguro.

hajamie
fuente
3
En el mismo archivo, tuve que configurar store-passwords = yes. Creo que se configuró antes, pero no se configuró cuando actualicé a SVN 1.7
pieman72
9

Tenga en cuenta el siguiente párrafo del ~/.subversion/serversarchivo:

Tanto 'store-passwords' como 'store-auth-creds' ahora se pueden especificar en el archivo 'servers' en su directorio de configuración. Todo lo especificado en esta sección se anula mediante la configuración especificada en el archivo 'servidores'.

Es al menos para la versión 1.6.12 de SVN. Por lo tanto, tenga en cuenta que debe editar el archivo de servidores también, ya que anula ~/.subversion/config.

Rusu Bogdan
fuente
Eso ayudó a ver que había una anulación en el mismo archivo (¡dos declaraciones de "almacenes de contraseñas"!). Se corrigió eso y el archivo svn.simple se creó con la propiedad gnome-keyring.
Danielson Alves Júnior
5

Si usa svn + ssh , puede copiar su clave ssh pública a la máquina remota:

ssh-copy-id user@remotehost
Michael Schmid
fuente
5

Para mí (usuario de Mac) el problema era que el llavero ya tenía una entrada almacenada para mis credenciales, pero los derechos de acceso no eran correctos.

Eliminar la entrada en la aplicación del llavero y luego recrearla usando svn solucionó el problema.

trias
fuente
4

Ninguna de estas maravillosas respuestas me funcionó en una instalación nueva de Ubuntu. En cambio, una pista de esta respuesta me sirvió.

Tuve que permitir el almacenamiento de contraseñas "simple" configurando este vacío en ~/.subversion/config:

password-stores =

No había ninguna configuración existente, por lo que estar vacío es significativo.

Esto fue además de:

store-passwords = yes

en ~/.subversion/servers.

Heath Raftery
fuente
Esto también me ayudó, ya que parece que la opción predeterminada debería funcionar, pero a menos que se especifique explícitamente, no funciona :(
Arunas Bartisius
3

Es posible que usar texto sin formato no sea la mejor opción, si la contraseña se usa alguna vez como otra cosa.

Apoyo la respuesta aceptada, pero no funcionó para mí, por una razón muy específica: quería usar kwalleto gnome-keyringalmacenes de contraseñas. Intenté cambiar la configuración, en los cuatro archivos:

/etc/subversion/config
/etc/subversion/servers
~/.subversion/config
~/.subversion/servers

Incluso después de que todo se configuró de la misma manera, con password-storesun nombre de KWallet (el valor predeterminado puede ser incorrecto, ¿verdad?) No funcionó y siguió pidiendo la contraseña para siempre. Los archivos en ~/.subversiontenían permisos 600.

Bueno, en ese punto, puede intentar verificar una cosa simple:

which svn

Si lo consigues:

/usr/bin/local/svn

entonces puede sospechar con gran probabilidad que este cliente fue construido desde la fuente, localmente, por su administrador (que puede ser usted mismo, como en mi caso).

Subversion es una bestia desagradable de compilar , muy fácil de construir accidentalmente sin soporte HTTP o, como en mi ejemplo, sin soporte para almacenes de contraseñas cifradas (necesita archivos de desarrollo Gnome o KDE, ¡y muchos de ellos!). Pero el ./configurescript no le dirá eso y obtendrá un svncomando menos funcional .

En ese caso, puede volver al cliente, que vino con su distribución, generalmente en formato /usr/bin/svn. La desventaja es que probablemente deba volver a verificar las copias de trabajo, ya que no hay ningún svn downgradecomando. Puede consultar a Linus Torvalds sobre qué pensar sobre Subversion, de todos modos;)

Tomasz Gandor
fuente
2

Para agregar a la respuesta de Heath: parece que Subversion 1.6 deshabilitó el almacenamiento de contraseñas de forma predeterminada si no puede almacenarlas en forma cifrada. Puede permitir el almacenamiento de contraseñas no cifradas estableciendo explícitamente password-stores =(es decir, en el valor vacío) en ~/.subversion/config.

Para comprobar qué tienda de contraseñas usa Subversion, busque en ~/.subversion/auth/svn.simple. Contiene varios archivos, cada uno de los cuales es una tabla hash con una codificación de clave / valor simple. El svn:realmstringen cada archivo identifica para qué reino es ese archivo. Si el archivo tiene

K 8
passtype
V 6
simple

luego almacena la contraseña en texto plano en algún lugar de ese archivo, en una K 8 passwordentrada. De lo contrario, intenta utilizar uno de los archivos password-stores.

thakis
fuente
1

Todos los métodos mencionados aquí no me funcionan. Construí Subversion desde la fuente y descubrí que debo ejecutar configure con --enable-plaintext-password-storagepara admitir esta función.

Dominio
fuente
1

Solo para enfatizar lo que dijeron Tomasz Gandor y Domain sobre tener la versión correcta de svn y que se compiló para permitir el almacenamiento de contraseñas de texto sin formato, debe verificar lo que tiene:

svn --version
svn, version 1.9.7 (r1800392)
...
WARNING: Plaintext password storage is enabled!
...

The following authentication credential caches are available:

* Plaintext cache in /gr/home/ffvdqb/.subversion
* GPG-Agent

Versus:

svn --version
svn, version 1.12.2 (r1863366)
...

The following authentication credential caches are available:

* Gnome Keyring
* GPG-Agent
* KWallet (KDE)

Una vez que vea que su versión de svn se habilitó para el almacenamiento de contraseña de texto sin formato, aplique el resto de las respuestas aquí.

Jim
fuente
1

Estoy usando el cliente TortoiseSVN en Windows y, para mí, configurar el parámetro store-passwords como en %USERPROFILE%\AppData\Roaming\Subversion\configno ayuda a almacenar la contraseña.

La contraseña se guardó correctamente después de eliminar esta carpeta (por si acaso se cambia el nombre):

%USERPROFILE%\AppData\Roaming\Subversion\auth

Ambiente:

Windows 7, TortoiseSVN 1.7.11 (Build 23600 - 64 bit, 2012-12-12T19:08:52), Subversion 1.7.8.
Anton Arkhipkin
fuente
0

Desafortunadamente, las respuestas no resolvieron el problema de solicitar la contraseña para ssh + svn con una clave privada protegida. Después de investigar un poco, encontré:

ssh-add

utilidad si tiene una computadora con Linux. Asegúrese de tener sus claves almacenadas /home/username/.ssh/y escriba este comando en la Terminal.

www
fuente