O macOS continua pedindo minha senha ssh desde que eu atualizei para a Sierra

579

Costumava lembrar a senha, mas agora está me perguntando a cada vez.

Eu li que preciso regenerar a chave pública com este comando, o que fiz:

ssh-keygen -y -f id_rsa > id_rsa.pub

mas não consertou nada.

Como posso fazer o macOS lembrar minha senha novamente?

erwan
fonte
Eu estou experimentando um comportamento relacionado: anteriormente, a caixa de diálogo do key-key apareceria para pedir a senha, agora eu só recebo o prompt do SSH normal. Algum registro de programa auxiliar provavelmente desapareceu.
Daniel B
1
Já faz anos desde que eu gerava meu id_rsa e nunca usei uma frase secreta e uso isso para o ssh em muitos servidores. Eu realmente tenho uma frase-senha ou é apenas o que Sierra acha que eu deveria? Note que $ cat ~ / .ssh / id_rsa | head -2 ----- INICIAR CHAVE PRIVADA RSA ----- Proc-Type: 4, ENCRIPTADO
Joe Murray
Se você estiver usando o Pretzo e nenhuma dessas respostas resolveu seu problema: verifique se você não tem o sshmódulo ativado zpretzorc. É desnecessário no macOS e, se ativado, ele solicitará sua senha mesmo após você ter adicionado UseKeychain.
Jimothy
1
tente fazer ssh -v ...para ver se tem alguma informação de depuração útil ...
rogerdpack

Respostas:

1115

Na última versão do macOS (10.12.2), isso é fácil de corrigir. Basta editar o seu ~/.ssh/confige ativar a UseKeychainopção:

Host *
    UseKeychain yes

Não há necessidade de mudar mais nada. Agora tudo funciona da maneira que costumava funcionar antes das atualizações mais recentes. Você não precisa adicionar chaves para ssh-agent.


Edit: você ainda pode precisar digitar sua senha uma vez. Se você não sabe, siga estas instruções para revelá-lo.

Jukka Suomela
fonte
24
Isso absolutamente funcionou para mim. Tudo abaixo parece mais complicado do que essa correção.
Br.Bill
80
Note que o Host *bloco deve (quase) sempre ser colocado na parte inferior do seu ~/.ssh/configarquivo. Quando sshestá procurando por configurações, usa o primeiro valor encontrado. Assim, ao colocar o bloco de curingas no final, ele age como um conjunto de padrões; você pode substituir as configurações de hosts específicos, especificando-os anteriormente no arquivo.
Molomby
6
Isso funcionou para mim também, mas eu tive que digitar a senha corretamente uma vez. Há outra resposta que descreve como você pode ver a senha se não se lembrar dela.
FGreg
25
Se o arquivo de configuração não existir, criar um e adicionar isso também funcionará.
wynshaft
6
Você não precisa do Host *título. Basta anexar a linha única UseKeychain yesna parte superior do seu, .ssh/configse desejar que isso se aplique a todos os hosts.
sj26
181

Eu tive o mesmo problema. O keychain do MacOS Sierra continua pedindo a frase secreta. Seu id_rsa deve ser criptografado com uma frase secreta para segurança. Em seguida, tente adicioná-lo ao chaveirossh-add -K ~/.ssh/id_rsa

Se a chave estiver em outra pasta ~/.ssh, substitua-a pela pasta correta.

Chaveiro agora sabe sua chave ssh e, espero, tudo funciona agora (o meu fez)

Lars G.
fonte
25
Isso funciona, mas parece não persistir quando eu reiniciar meu computador. Alguém mais com o mesmo problema?
joshua.paling
1
Sim, o mesmo problema aqui. @ joshua.paling
kingkool68
18
@ joshua.paling, kingkool68 - A Apple removeu a capacidade de lembrar de suas chaves SSH durante a reinicialização para estar em conformidade com o comportamento convencional do OpenSSH. Veja esta pergunta para outras maneiras de obter a mesma funcionalidade: apple.stackexchange.com/questions/254468/…
Evan Pon
@EvanPon Mas isso não funcionará com chaves criptografadas, será?
Konrad Rudolph
2
@KonradRudolph funciona para mim. Chamar ssh-addcom a -Aopção procurará no keychain do MacOS qualquer senha para as identidades em questão. Eu acredito que ele irá perguntar se as senhas não estão no chaveiro.
Evan Pon
72

Isso corrigiu meu problema semelhante:

/usr/bin/ssh-add -K

Isso armazena senhas em seu chaveiro.

Atualização (obrigado @EasyCo): Isso funciona, mas não persiste entre as reinicializações. @ solução de Jukka-Suomela desta página não trabalhar nas reinicializações. Você pode encontrar essa resposta aqui:

https://superuser.com/a/1158050/234685

critikaster
fonte
3
Essa é a única coisa que funciona.
cryptic0
5
Eu não precisei criar o arquivo .ssh / .config ao usar esta solução.
Shai
Isso funcionou para mim. Não há necessidade de editar o arquivo host. Eu estou na Sierra.
cchiera
Isso funcionou para mim no Mac OS Sierra.
Dayron Gallardo
2
Como dito anteriormente, isso funciona, mas não persiste entre as reinicializações. A solução da @jukka-suomela funciona nas reinicializações.
EasyCo
40

Eu só tive que digitar a senha correta uma vez e ela começou a funcionar. O problema era que eu não lembrava da minha senha SSH original, mas eu a recuperei seguindo estes passos do Github:

  • No Finder, pesquise pelo aplicativo Keychain Access.
  • No Acesso às Chaves, pesquise por SSH.
  • Clique duas vezes na entrada da sua chave SSH para abrir uma nova caixa de diálogo.
  • Caixa de diálogo de acesso às chavesNo canto inferior esquerdo, selecione Mostrar senha.
  • Você será solicitado para sua senha administrativa. Digite-o na caixa de diálogo "Acesso às Chaves".
  • Sua senha será revelada.
Olli Jaakkola
fonte
2
Não funciona. Terminal ainda diz "senha ruim"
Jayden Lawson
18

Nenhuma das soluções acima funcionou após a instalação do Sierra sobre o El Capitan em um novo MacBook Pro. O Sierra by design não salva chaves SSH no keychain.

Duas soluções funcionaram para mim. Uma é adicionar o comando ssh-add -A &> /dev/nulla ~ / .bash_profile. Toda vez que você abrir o terminal, este comando será executado (a &> /dev/nullparte envia a saída do comando o arquivo / dev / null).

Uma solução mais complicada, mas ligeiramente mais tênue, é criar um plist com o comando que é executado toda vez que o SO é inicializado, como sugerido em Salvando chaves SSH no macOS Sierra keychain . Isso envolve o uso do Xcode para criar o arquivo.

Hank Snow
fonte
Esta parece ser a resposta oficial da Apple também - veja openradar.appspot.com/27348363
Nick Maynard
A melhor solução até agora para mim. Estou usando o Mac OSX Sierra (10.12.2).
zyc
15

Uma correção é adicionar o seguinte ao seu arquivo ~ / .ssh / config:

Host *
   AddKeysToAgent yes
   IdentityFile ~/.ssh/id_rsa
   UseKeychain yes

Retirado de: https://www.reddit.com/r/osx/comments/52zn5r/difficulties_with_sshagent_in_macos_sierra/ Veja também: https://apple.stackexchange.com/a/264974/3810

ThomasW
fonte
Até agora, em nenhuma das respostas, alguém mencionou o Bad configuration option: usekeychainerro que recebo com UseKeychain (no entanto, é capitalizado). Mas eu era capaz de fazê-lo funcionar, removendo apenas essa linha e deixando AddKeysToAgent e IdentityFile (você ainda tem que digitar a senha na primeira vez). Isso é com o macOS Sierra 10.12.6.
William Turrell
isso funciona bem quando estou no terminal e uso o comando ssh, mas outros aplicativos, como WebStorm que usam seu próprio terminal, não aceitam essa configuração até que eu use primeiro um comando ssh no terminal regular. então funciona em todos os lugares, alguma sugestão?
santiago arizti
@WilliamTurrell Se isso ainda acontecer, digite which sshpara garantir que você está usando /usr/bin/sshe não uma versão do Fink ou MacPorts, que estaria sob algo como /usr/local/bin/sshou/opt/local/bin/ssh
Stefan Lasiewski
7

Esta manhã, tive o mesmo problema que você depois de atualizar para a Sierra. No meu caso, o id_rsaarquivo foi criptografado e depois de descriptografar, estava funcionando como um encanto.

  1. Verifique se seu id_rsaarquivo está criptografado com o seguinte comando:cat ~/.ssh/id_rsa | head -2
  2. Se a segunda linha diz Proc-Type: 4,ENCRYPTED, é criptografado e você pode tentar descriptografá-lo
  3. Importante: faça um backup do seu id_rsaarquivo original ! Use o comandocp ~/.ssh/id_rsa ~/.ssh/id_rsa.bak
  4. Descriptografe sua chave privada com openssl rsa -in ~/.ssh/id_rsa -out ~/.ssh/id_rsa.decrypted
  5. Remova a chave original ( rm ~/.ssh/id_rsa) e substitua-a por uma descriptografada:mv ~/.ssh/id_rsa.decrypted ~/.ssh/id_rsa

Após essas etapas, você poderá usar o ssh novamente.

Martijn Pieters
fonte
4
Embora isso seja uma solução alternativa, não acho que realmente resolva o problema do OP.
Daniel B
Isso funciona para mim. @ DanielB, qual é o problema em fazer isso?
Dag Høidahl
7
@ DagHøidahl A chave não será mais criptografada. Pode ser roubado com direitos de usuário regulares, portanto, a criptografia é um forte deve.
Daniel B
6
Isso remove a senha da chave, e é por isso que funciona em torno do problema do OP. Mas eu recomendo contra isso. A senha é tudo o que impede as pessoas de usarem sua chave quando ela é roubada. Como sua chave provavelmente dará acesso a vários sistemas, você não quer enfraquecê-la.
Martijn Heemels
5

Tentei várias respostas aqui, mas ainda estava tendo problemas com a passagem de chaves remotas (por exemplo, ao usar o capistrano). Para resolvê-lo, eu li a technote da apple e fiz este meu arquivo de configuração. Não mais pedindo minha senha!

https://developer.apple.com/library/content/technotes/tn2449/_index.html

Host *  
   IdentityFile ~/.ssh/id_rsa  
   IgnoreUnknown UseKeychain  
   UseKeychain yes  
   AddKeysToAgent yes
Deusa do totó
fonte
3

Eu tive esse problema também ao tentar implantar algum código usando o Capistrano . Muito frustrante. Aqui estão dois métodos que conheço para lidar com esse problema.

Método 1: Adicione todas as chaves conhecidas ao agente SSH.

Portanto, uma solução que encontrei é executar ssh-addcom a -Aopção - que adiciona todas as identidades conhecidas ao agente SSH usando as frases secretas armazenadas em seu conjunto de chaves - assim:

ssh-add -A

Agora isso funciona, mas não vai persistir durante as reinicializações. Então, se você nunca quer se preocupar com isso novamente, basta abrir o ~/.bash_profilearquivo do seu usuário assim:

nano ~/.bash_profile

E adicione essa linha ao final:

ssh-add -A 2>/dev/null;

Agora, quando você abrir uma nova janela do Terminal, tudo deve ser bom!

Método 2: Adicione somente chaves SSH que estão no keychain ao agente.

Portanto, embora a ssh-add -Aopção deva funcionar na maioria dos casos básicos, encontrei um problema recentemente em que tinha 6-7 caixas Vagrant (que usam chaves SSH / identidades para acesso) configuradas em uma máquina sobre as mais comuns id_rsa.pubno lugar.

Para encurtar a história, acabei sendo bloqueado de um servidor remoto devido a muitas tentativas mal-sucedidas com base em identidades / chaves SSH, pois o acesso ao servidor era baseado em uma senha e as chaves / identidades SSH são chaves / identidades SSH. Assim, o agente SSH tentou todas as minhas chaves SSH, falhou e eu não consegui nem chegar ao prompt da senha.

O problema é que ssh-add -Aapenas adicionará arbitrariamente cada chave / identidade SSH ao agente, mesmo que não seja necessário fazê-lo; como no caso das caixas Vagrant.

Minha solução depois de muitos testes foi a seguinte.

Primeiro, se você tiver mais identidades / chaves SSH adicionadas ao seu agente do que o necessário, como mostrado ssh-add -l, elimine todas elas do agente da seguinte forma:

ssh-add -D

Feito isso, inicie o agente SSH como um processo em segundo plano como:

eval "$(ssh-agent -s)"

Agora, fica estranho e não tenho certeza do porquê. Em alguns casos, você pode adicionar especificamente a ~/.ssh/id_rsa.pubchave / identidade ao agente da seguinte forma:

ssh-add ~/.ssh/id_rsa.pub

Digite sua frase-senha, clique em Returne você deve estar pronto para ir.

Mas em outros casos, basta executar isso para obter a chave / identidade adicionada:

ssh-add -K

Se tudo isso funcionar, digite ssh-add -le você deverá ver uma única chave / identidade SSH listada.

Tudo bom? Agora abra seu .bash_profile:

nano ~/.bash_profile

E adicione esta linha ao fundo; comentar ou remover a -Aversão se você tiver isso no lugar:

ssh-add -K 2>/dev/null;

Isso permitirá que a chave / identidade SSH seja recarregada no agente SSH em cada inicialização / reinicialização.

ATUALIZAÇÃO: A Apple agora adicionou uma UseKeychainopção às opções de configuração de SSH abertas e também considera ssh-add -Auma solução.

A partir do macOS Sierra 10.12.2, a Apple (eu suponho) adicionou uma UseKeychainopção de configuração para as configurações do SSH. Verificar a página do manual (via man ssh_config) mostra as seguintes informações:

UseKeychain
        On macOS, specifies whether the system should search for
        passphrases in the user's keychain when attempting to use a par-
        ticular 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''.

Qual se resume a Apple vendo a solução como adicionar ssh-add -Aao seu .bash_profile conforme explicado neste ticket Open Radar ou adicionando UseKeychaincomo uma das opções em um por usuário ~/.ssh/config.

JakeGould
fonte
3

A resposta de Jukka Suomela está correta, mas se você está usando o opensshinstalado homebrew, então você também precisa desinstalá-lo com:

brew remove openssh

... para voltar ao padrão do sistema openssh, porque o homebrew não suporta UseKeychainentrada ssh config.

Greg Dubicki
fonte
1
Se alguém quiser isso com homebrews, faça um ping me aqui: github.com/rdp/homebrew-openssh-gssapi
rogerdpack
1

Eu tentei todas as soluções sugeridas aqui, mas não tenho keychain configurado no meu Mac.

Adicionando a seguinte linha no .ssh/configarquivo superior em ambos os locais e a máquina remota funcionou para mim.

PubkeyAcceptedKeyTypes=+ssh-dss 
Roei Bar Aviv
fonte
1

Você precisa de um .plistarquivo adicionado para ~/Library/LaunchAgents/ser executado ssh-add -Aem todas as inicializações do macOS.

Existe um único comando que faz isso (do SSH-keys-in-macOS-Sierra-keychain ) que é:

curl -o ~/Library/LaunchAgents/ssh.add.a.plist https://raw.githubusercontent.com/jirsbek/SSH-keys-in-macOS-Sierra-keychain/master/ssh.add.a.plist
Alecust
fonte