SVN + SSH, não tendo que fazer ssh-add todas as vezes? (Mac OS)

105

Eu sei que a resposta está aí, mas sou muito burro do Unix e provavelmente não reconheceria a solução se ela me atingisse na cara.

Estou em um Mac, conectando-me a um servidor SVN por meio de encapsulamento SSH. Tenho que fazer isso ssh-add privateKey.txtsempre que quiser me conectar ao servidor SVN (tanto o Cornerstone quanto o Xcode estão se conectando ao SVN).

Existe uma maneira de "salvar" a chave em algum lugar para que eu não tenha que fazer isso todas as vezes? Adicionar ao meu chaveiro? Algum arquivo de configuração? Iniciar o script?

James J
fonte

Respostas:

172

Primeiro, mova seu arquivo de chave privada para ~/.ssh . Isso não é estritamente necessário, mas é o local padrão para essas coisas.

Então corra ssh-add -K ~/.ssh/privateKey.txt. Ele solicitará sua frase-senha se necessário e, em seguida, adicione-a às suas Chaves.

Depois disso, você não precisará fazer mais nada. Uma explicação um pouco mais longa está disponível aqui .

Nicholas Riley
fonte
17
Acho que é importante notar explicitamente que isso é uma coisa do Mac, não uma coisa universal do Unix. No Ubuntu, ssh-addnão aguento um -Kargumento.
Mark Amery
2
Gostaria de observar que, embora o artigo vinculado seja para o Leopard, ele ainda funciona no OS X Mavericks.
Josh Brown de
1
Talvez alguém tenha um comando equivalente para outros ambientes? O ssh-add do mysysgit também não aceita o argumento -K
Blake
5
Por alguma razão, quando eu faço -K, ainda tenho o problema após o reinício
Mat Teague
7
Você está no macOS Sierra? O comportamento mudou e agora você precisa adicionar explicitamente suas chaves ao ssh-agent no login: github.com/jirsbek/SSH-keys-in-macOS-Sierra-keychain
Nicholas Riley
49

Armazenamento de frases-chave no chaveiro

Para armazenar a senha de sua chave padrão nas Chaves, abra um Terminal e execute:

ssh-add -K

E para armazenar a senha longa para uma execução de chave diferente:

ssh-add -K /path/to/private/key/file

Quando for solicitada sua senha, digite-a e pronto.

Você nunca precisará executar ssh-add nem inserir sua senha novamente.

Resposta retirada deste site: http://www-uxsup.csx.cam.ac.uk/~aia21/osx/leopard-ssh.html

Adão
fonte
20

Depois de muita exploração, acho que encontrei a resposta para esse problema completamente. Primeiro, certifique-se de fazer ssh-add -K ~/.ssh/your_key_here. Isso adiciona a chave ao seu chaveiro. Em alguns lugares, li que isso é suficiente, mas não tinha certeza. Isso também é específico do Mac, portanto, se você precisar fazer isso em outro tipo de unix, não terá essa opção necessariamente.

Para garantir, editei o ~/.ssh/configarquivo (talvez você precise criá-lo) para apontar para todas as chaves que possuo. O meu tem o seguinte:

IdentityFile ~/.ssh/identity
IdentityFile ~/.ssh/id_rsa
IdentityFile ~/.ssh/id_dsa 
IdentityFile ~/.ssh/my_other_identity_here
IdentityFile ~/.ssh/yet_another_identity_here

De acordo com a página de manual do ssh_config, ele os tentará em ordem. Não tenho certeza se os três primeiros padrões que listei precisam estar lá, mas eu os incluí mesmo assim.

mitalia
fonte
Não há -Ksinalização no mac os x parassh-add
dr.dimitru
2
Não é uma -Kbandeira no OS X para ssh-add. Além disso, esta deve ser a resposta selecionada.
Kaiser
1
Certifique-se de usar /usr/bin/ssh-addo homebrew fornecido /usr/local/bin/ssh-addque não oferece a opção -K.
Remco Wendt
2
Assim que ~/.ssh/configestiver lá, não há necessidade de executar o ssh-addcomando todas as vezes após reiniciar a máquina.
hailong
7

Desde o macOS 10.12.2, você pode usar essa UseKeychainopção. Leia mais aqui ou dê uma olhada man ssh_config.

     UseKeychain
         On macOS, specifies whether the system should search for passphrases in the user's keychain
         when attempting to use a particular key. When the passphrase is provided by the user, this
         option also specifies whether the passphrase should be stored into the keychain once it has
         been verified to be correct.  The argument must be ``yes'' or ``no''.  The default is ``no''.

Então, faça o seguinte:

echo "UseKeychain yes" >> ~/.ssh/config

Ben
fonte
3
Isso precisa subir. Muito importante !
quarezz
2

Não tenho muita experiência com macs, então não tenho certeza se esta versão é adequada para você, mas dê uma olhada em http://www.phil.uu.nl/~xges/ssh/

Se este aplicativo em particular não funcionar, é isso que você está procurando de qualquer maneira - ssh agent. Em caixas do tipo unix, você gostaria de iniciar todo o seu gerenciador de janelas por meio disso, para obter o efeito global, mas pode não ser possível no osx.

Mais algumas informações: http://www-uxsup.csx.cam.ac.uk/~aia21/osx/leopard-ssh.html

viraptor
fonte
1

sshkeychain é uma possibilidade. instala bem com macports usando:

sudo port install sshkeychain

ele usa as chaves para armazenar senhas e você pode simplesmente iniciá-lo na inicialização de sua sessão de login (usando na primeira inicialização o clique com o botão direito no ícone do dock + "iniciar na inicialização")

Observe que o svn da Apple usa chaves para armazenar senhas, mas não necessariamente o binário svn que você construiria com macports.

Meduz
fonte
0

Adicione sua chave ao chaveiro executando:

ssh-add -K ~/.ssh/id_rsa

e edite seu arquivo ssh config ( ~/.ssh/config) para carregar automaticamente as chaves do keychain para o ssh-agent ( AddKeysToAgent yesopção) e armazenar as senhas no keychain ( UseKeychain yesopção):

Host *
 AddKeysToAgent yes
 UseKeychain yes
Jakub Kukul
fonte