¿Cómo puedo proporcionar una contraseña SSH a SVN en la línea de comando?

8

En mi caso, quiero hacer un pago SVN:

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

Sin embargo, quiero tener la contraseña en esa línea, para que no aparezca.

Alex
fuente
1
Solo una advertencia rápida: su nombre de usuario y contraseña estarán expuestos a CUALQUIERA que tenga acceso a esa máquina. Solo un simple comando "ps-self" mostrará la línea de comando completa. En general, esta no es una buena idea en cuanto a seguridad, y por qué svn y las herramientas similares solicitan contraseñas. No es que no pueda hacerlo si controla quién tiene acceso al sistema, simplemente no quiere que las personas piensen que deberían hacerlo en general.
Jared

Respuestas:

12

svn co svn + ssh: // nombre de usuario: contraseñ[email protected]/home/svn/shproject

Mario
fuente
+1 por responder a la pregunta y no solo por proporcionar alternativas (por valiosas que puedan ser).
briealeida
@briealeida - Solo desearía que funcionara: de acuerdo con la prueba en mi publicación a continuación , parece que no funciona, ya que de todos modos aparece un mensaje de contraseña; la misma publicación contiene una solución con sshpass(que funciona para mí).
sdaau
Como se dijo anteriormente, esto en realidad no funciona.
Jonny
Ampliado: es probable que funcione siempre que ssh no solicite una contraseña, lo que sería en la mayoría de los casos.
Jonny
16

Dado que está utilizando SSH, la forma preferida es utilizar una clave pública para la autorización, lo que ahorra la necesidad de una contraseña por completo.

Puede encontrar una guía para crear e instalar las claves aquí .

abyx
fuente
Por supuesto, si desea que su clave sea realmente segura, debe darle una contraseña. : /
Rob
7

Infinitamente mejor es generar un par de claves. Como usuario local:

$ ssh-keygen -t rsa

(aceptar todos los valores predeterminados)

Luego tome el contenido de .ssh / id_rsa.pub y agréguelo en el servidor remoto a .ssh / Authorizedkeys Asegúrese de que todo esté pegado en la misma línea. También asegúrese de que los permisos del directorio .ssh sean 600.

Entonces debería poder ssh sin que se le solicite una contraseña.


fuente
"Los permisos de ~ / .ssh en el servidor deben ser 700. Se supone que el archivo ~ / .ssh / certified_keys (en el servidor) tiene un modo de 600. Los permisos de la clave (privada) en el lado del cliente debería ser 600. " askubuntu.com/a/46425
Jonny
6

En lugar de usar una contraseña, es posible que desee echar un vistazo a un par de claves privada / pública y hacer que ssh lo use. La mayoría de las distribuciones de Linux vienen con comandos fáciles de usar para crear ese par. sin embargo, esto requeriría acceso al servidor (una vez) para depositar el archivo de clave pública en el archivo ~ / .ssh / Authorized_keys de su usuario.

Daniel Schneller
fuente
3

Bueno, yo no quiero que introduzca una contraseña - No me gusta depender de la contraseña de seguridad guardado en alguna parte; sin embargo, quiero ingresarlo una vez por conjunto de comandos svn + ssh; y a menudo, solo quieres hacer una svn checkout, y de todas formas tienes que ingresar toneladas de contraseñas. En ese caso, me gustaría escribir una contraseña solo una vez.

Entonces, solo las respuestas de @Boinst y @Marius fueron relevantes para mi caso de uso; desafortunadamente, no ayudaron, ya que no pude hacer que trabajaran. Me pregunto si los autores de la publicación probaron los comandos antes de publicarlos, ya que ahora no puedo imaginar cómo podrían funcionar: aquí hay una prueba que hice localmente en mi PC Ubuntu 10.04 (y rompo con Ctrl-C, cada vez que veo el solicitud de contraseña aparece):

$ 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

En lo que respecta --username/--passworda la svnlínea de comandos, eso no importa svn+ssh, porque está sshpreguntando, no svn:

svn - Subversion ignorando las opciones "--password" y "--username"

El mensaje que está recibiendo no se parece a Subversion pidiéndole una contraseña, parece ssh pidiéndole una contraseña.

Además, como lo muestra el registro, sshno acepta " username:password@..." en la URL, y tampoco lo hace svn. svnEs probable que se explique por qué es aceptable usar solo nombre de usuario en la URL en ~/.subversion/config:

### (Si la URL incluye un nombre de usuario, el nombre de host se pasará
### al agente de túnel como @.)

Observe que no se dice nada al respecto <user>:<pass>@<hostname>.

Ahora, gracias a la página Subversion sobre SVN + SSH en Debian , finalmente me di cuenta de que hay una SVN_SSHvariable de entorno utilizada ~/.subversion/configpara el túnel ssh (supongo); y eso finalmente abre la posibilidad de usar el programa sshpasspara manejar la contraseña de una manera unidireccional:

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

Bueno, al menos me alegro de haber encontrado finalmente una solución que funcione para mí. Espero que esto también ayude a alguien más,
¡salud!

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

Creo que usar sshpass (en Linux) es la mejor manera de obtener esto.

Instalar sshpass

$ sudo apt-get install sshpass

Establecer la variable de entorno temporal

$ export SSHPASS=*yourpass*

Edite el archivo de configuración de svn

$ nano ~/.subversion/config

Finalmente comentar agregar sshpass -ea la línea ssh, antes del sshcomando

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