como evitar ser perguntado “Digite a frase secreta para a chave” quando estou fazendo a operação ssh em um host remoto?

25

Eu sou ssh em um host remoto (linux, fedora) e eu quero fazer a operação ssh (git with bitbucket) lá. Há ssh-agent em execução nessa máquina,

$ ps -e|grep sh-agent
 2203 ?        00:00:00 ssh-agent

mas quando eu quero git, é necessário que eu insira a frase secreta

$ git pull
Enter passphrase for key '/user/wgong/home/.ssh/id_rsa': 

Observação: se eu operar nessa máquina localmente, não será necessário inserir a frase secreta

    
por lily 18.10.2015 / 05:00

6 respostas

56

Na minha opinião, a melhor maneira de usar o ssh

Antes de usar o Git, adicione sua chave ao ssh-agent

Inicie o ssh-agent se não for iniciado:

$ eval 'ssh-agent -s'

Adicione sua chave privada usando ssh-add

$ ssh-add ~/.ssh/id_rsa_key
Enter passphrase for /home/user/.ssh/id_rsa_key:
Identity added: /home/user/.ssh/id_rsa_key
(/home/user/.ssh/id_rsa_key)

Verifique se a chave foi adicionada (o parâmetro é um L minúsculo):

$ ssh-add -l
2048 55:96:1a:b1:31:f6:f0:6f:d8:a7:49:1a:e5:4c:94:6f
/home/user/.ssh/id_rsa_key (RSA)

Tente se conectar ao seu servidor Git:

$ ssh git.example.com

Agora você pode usar o Git sem prompts de senha extra.

Outras formas

link

    
por 22.10.2015 / 20:38
13

Se você já tiver o ssh-agent em execução, poderá adicionar a chave e digitar a senha uma vez, e apenas uma vez para essa sessão.

ssh-add ~/.ssh/id_rsa

Você não diz qual SO está usando, mas se ele for Linux & O Gnome então o aplicativo "Senhas e Chaves" (nome do CLI: seahorse ) pode gerenciar estes para que eles sejam desbloqueados quando você efetuar login (não é necessária uma frase secreta). Outros ambientes de desktop Linux possuem seus próprios gerenciadores. Não tenho certeza do que outros sistemas operacionais fazem aqui.

    
por 21.10.2015 / 17:30
2

O programa ssh-add inicia um agente que pode conter (e fornecer) sua frase secreta. A maneira de usá-lo remotamente é em um pai do seu shell interativo (para que o agente não pare).

Aqui estão algumas perguntas relacionadas:

Agora ... conectando remotamente , via de regra, seu comando não faz login como tal, portanto, ele não inicia ssh-add . Você poderia contornar isso, executando um script que

  • inicia ssh-agent
  • inicia ssh-add
  • adiciona sua chave
  • executa o comando que você deseja.

O ponto fraco é o segundo passo: você ainda será solicitado a fornecer a frase secreta, a menos que você enfraquece a sua segurança usando uma chave que não tem nenhuma frase secreta . Algumas pessoas fazem isso, a maioria das pessoas desaconselha.

    
por 18.10.2015 / 12:22
2

A principal razão para a senha perguntar é que sua chave está criptografada, compare estes dois:

  • não criptografado

    $ head ~/.ssh/id_rsa 
    -----BEGIN RSA PRIVATE KEY-----            
    AIIAogIBAAKCAQEAtOJQ0Z3ZbyzuknnHqn5oMCmNf8zGmERhW+g5Eftf9daZ5qvZ
    
  • criptografado

    $ head ~/.ssh/id_rsa 
    -----BEGIN RSA PRIVATE KEY-----    
    Proc-Type: 4,ENCRYPTED
    DEK-Info: AES-128-CBC,A95215C9E9FE00B8D73C58BE005DAD82
    
    ZAzLq/LbHSfOVkXtQz6M6U8yuAx2lIu9bH/k7ksgat92IDjZntRrT1XMpkYtjB+0
    

Então você precisa seguir um destes procedimentos:

  1. Se estiver criptografado, você pode tentar remover a criptografia .
  2. Você está usando a chave errada. Se você quiser usar uma chave diferente, especifique outro arquivo ou edite seu ~/.ssh/config e especifique um arquivo de identidade diferente ( IdentityFile ).
  3. Execute ssh-add -l para listar todas as suas identidades (em seguida, compare com seu local) e verifique novamente com o Stash, se você estiver usando as teclas corretas (elas existem na configuração do Stash).
  4. Se você souber a frase secreta e quiser automatizá-la, tente a seguinte solução alternativa:

    PS="my_passphrase"
    install -vm700 <(echo "echo $PS") $PWD/my_pass
    DISPLAY= SSH_ASKPASS=$PWD/my_pass ssh-add - && rm -v my_pass
    

Solução de problemas:

  1. Verifique novamente se seu agente SSH está em execução ( eval "$(ssh-agent -s)" ).
  2. Execute novamente o git via: GIT_TRACE=1 git pull ou com GIT_SSH_COMMAND="ssh -vv" (Git 2.3.0+) para depurar seu comando novamente.
  3. Você pode tentar ignorar a senha (que irá redirecioná-la para true ), mas não acho que isso ajude. Se ele pedir, há uma razão para isso e é basicamente necessário.

    DISPLAY= SSH_ASKPASS=/bin/true ssh-add
    
por 18.10.2015 / 12:56
0

Você pode remover facilmente a frase secreta de sua chave usando o seguinte comando

ssh-keygen -p

No primeiro prompt, insira o caminho do arquivo (ou pressione Enter para alterar o padrão) Segundo prompt, insira a senha antiga Próximo prompt, basta pressionar enter para cancelar a frase secreta

Parece que esta é a maneira mais fácil!

    
por 16.12.2017 / 11:31
0

Você ainda receberá uma solicitação de senha para descriptografar a chave privada, mesmo se ela estiver carregada em ssh-agent até que a chave pública correspondente do SSH seja adicionada ao ~/.ssh/authorized_keys .

Para reproduzir:

# We are about to ssh to localhost, therefore, unauthorized everyone.
$ rm ~/.ssh/authorized_keys

$ eval $(ssh-agent)
# Agent pid 9290

$ ssh-add
# Enter passphrase for /home/uvsmtid/.ssh/id_rsa: 
# Identity added: /home/uvsmtid/.ssh/id_rsa (/home/uvsmtid/.ssh/id_rsa)

$ ssh localhost
# Enter passphrase for key '/home/uvsmtid/.ssh/id_rsa':
# uvsmtid@localhost's password:
  # NOTE: See password prompt for private key
  #       (and only then prompt for remote login).
  #       Why? Isn't the private key is already loaded by 'ssh-add'?

$ ssh-copy-id localhost
$ ssh localhost
  # NOTE: No password for private key anymore.
  #       The key is served by 'ssh-agent'.

Confuso o suficiente. A senha de login do SSH remoto seria suficiente nesse caso.

Posso especular que isso evita adicionar sua chave pública (que é emparelhada com a chave privada criptografada) sem saber a senha de criptografia da chave privada correspondente. É um procedimento de login único por acesso remoto de qualquer maneira.

    
por 30.03.2018 / 18:36

Tags