Como posso fornecer uma senha SSH ao SVN na linha de comando?


8

No meu caso, quero fazer um check-out de SVN:

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

No entanto, quero ter a senha nessa linha, para que ela não apareça.


1
Apenas um aviso rápido - seu nome de usuário e senha serão expostos a QUALQUER PESSOA com acesso a essa máquina. Apenas um simples comando "ps -elf" mostrará a linha de comando completa. Em geral, isso não é uma boa idéia em termos de segurança, e por que o svn e as ferramentas como ele solicitam senhas. Não que você não possa fazê-lo se controlar quem tem acesso ao sistema, apenas não queira que as pessoas pensem que deveriam fazer isso em geral.
Jared

Respostas:


12

svn co svn + ssh: // nome do usuário: password@10.106.191.164/home/svn/shproject


+1 por responder à pergunta e não apenas fornecer alternativas (por mais importantes que sejam).
Briealeida 19/11/2009

@briealeida - Eu só queria que funcionasse: de acordo com o teste no meu post abaixo , parece que não funciona, pois uma senha sempre aparece; o mesmo post contém uma solução com sshpass(o que funciona para mim).
Sdaau

Como dito acima, isso realmente não funciona.
Jonny

Expandido: provavelmente funcionaria desde que o ssh não solicite uma senha, o que na maioria dos casos.
9139 Jonny

16

Como você está usando SSH, a maneira preferida é usar uma chave pública para autorização, o que evita completamente a necessidade de uma senha.

Um guia para criar e instalar as chaves pode ser encontrado aqui .


Obviamente, se você deseja que sua chave seja realmente segura, você deve fornecer uma frase secreta. : /
Rob

7

Infinitamente melhor é gerar um par de chaves. Como seu usuário local:

$ ssh-keygen -t rsa

(aceite todos os padrões)

Em seguida, pegue o conteúdo de .ssh / id_rsa.pub e adicione-o no servidor remoto a .ssh / allowed_keys Certifique-se de que tudo esteja colado na mesma linha. Também verifique se as permissões do diretório .ssh são 600.

Então você deve poder fazer o ssh sem ser solicitada uma senha.


"As permissões de ~ / .ssh no servidor devem ser 700. O arquivo ~ / .ssh / allowed_keys (no servidor) deve ter um modo de 600. As permissões da chave (privada) no lado do cliente deve ser 600. " askubuntu.com/a/46425
Jonny

6

Em vez de usar uma senha, convém dar uma olhada em um par de chaves pública / privada e usar o ssh. A maioria das distribuições Linux vem com comandos fáceis de usar para criar esse par. no entanto, isso exigiria acesso ao servidor (uma vez) para depositar o arquivo de chave pública no arquivo ~ / .ssh / allowed_keys do usuário.


3

Bem, eu não quiser digitar uma senha - Eu não gosto de depender da minha password ser salvo em algum lugar; no entanto, quero inseri-lo uma vez por conjunto de comandos svn + ssh; e muitas vezes, você só quer fazer uma svn checkout- e precisa digitar toneladas de senhas de qualquer maneira. Nesse caso, eu gostaria de digitar uma senha apenas uma vez.

Portanto, apenas as respostas de @Boinst e @Marius foram relevantes para o meu caso de uso; infelizmente, eles não ajudaram, pois eu não consegui fazê-los funcionar. Gostaria de saber se os autores do post tentaram os comandos antes de publicá-los, como agora não consigo imaginar como eles poderiam funcionar - aqui está um teste que fiz localmente no meu PC Ubuntu 10.04 (e quebro o Ctrl-C, cada vez que vejo o solicitação de senha):

$ 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

No que diz respeito --username/--passwordà svnlinha de comando - isso não importa svn+ssh, porque está sshperguntando, não svn:

svn - Subversion ignorando as opções "--password" e "--username" - Stack Overflow em Português

O prompt que você está recebendo não se parece com o Subversion solicitando uma senha, mas com o ssh solicitando uma senha.

Além disso, como o log mostra, sshele " username:password@..." não aceita o URL - e o mesmo não acontece svn. Por que é aceitável usar apenas o nome de usuário na URL svn, provavelmente está explicado em ~/.subversion/config:

### (Se a URL incluir um nome de usuário, o nome do host será
### passado para o agente de encapsulamento como @.)

Observe que nada é dito sobre <user>:<pass>@<hostname>.

Agora, graças à página Subversion sobre SVN + SSH no Debian , finalmente percebi que há uma SVN_SSHvariável de ambiente usada no ~/.subversion/configtúnel ssh (eu acho); e isso finalmente abre a possibilidade de usar o programa sshpasspara manipular a senha de uma maneira unidirecional:

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

Bem, pelo menos estou feliz por finalmente encontrar uma solução que funcione para mim - espero que isso ajude outra pessoa também,
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

Eu acho que usar sshpass (no Linux) é a melhor maneira de conseguir isso.

Instalar sshpass

$ sudo apt-get install sshpass

Defina a variável de ambiente temporária

$ export SSHPASS=*yourpass*

Edite o arquivo de configuração svn

$ nano ~/.subversion/config

Finalmente comente adicionar sshpass -eà linha ssh, antes do sshcomando

ssh = $SVN_SSH sshpass -e ssh -q -o ControlMaster=no
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.