Questão Como configuro o SSH para não ter que digitar minha senha?


Como faço para configurar o SSH para que eu não precise digitar minha senha ao se conectar a um host?


136


origem


Pode-se argumentar se o uso de tais chaves não requer uma senha. Para evitar que qualquer um que consiga sua chave privada possa realmente abusar dela, pode-se proteger a chave com uma senha própria. Claro, pode-se deixar essa senha em branco, mas há muitos casos em que isso não seria recomendado. - Arjan
No último Cygwin com o mais recente SSH, eu estava sendo re-solicitado porque eu precisava fazer uma alteração no meu ~/.ssh/config que agora é necessário PubkeyAcceptedKeyTypes ssh-rsa*,ssh-dss* - HDave


Respostas:


Gere uma chave SSH (se você não tiver uma)

Se acontecer de você usar o GNOME, o cavalo marinho aplicação ("senhas e chaves de criptografia") pode fazer isso por você: Arquivo -> Novo -> Secure Shell Key.

Se você preferir terminal, corra ssh-keygen -t <type> para gerar um par de chaves. Os tipos de par de chaves válidos são:

  • rsa: o padrão
  • dsa: mais ou menos equivalente, exceto restrito a chaves de 1024 bits
  • ecdsa: mesma segurança com chaves menores, mas relativamente nova e um pouco rara no software SSH.
  • ed25519: Alta segurança (mais resistente a ataques de canal lateral e geradores de números aleatórios fracos). Geração de assinatura muito rápida. Muito novo. Apenas disponível em OpenSSH> = 6,5.

O programa irá pedir-lhe um passphrase e um local onde salvar a nova chave. Recomenda-se usar o caminho padrão sugerido, porque todas as outras ferramentas o procurarão lá.

Carregar a chave pública para o servidor remoto

Novamente, cavalo marinho muitas vezes pode fazer isso por você - em Minhas chaves pessoais, clique com o botão direito na sua chave SSH e escolha Configurar chave para shell seguro.

Ou, ssh-copy-id -i ~/.ssh/id_rsa.pub remote-user@remote-host no terminal.

Ou, completamente manualmente, passo a passo:

  1. Crie um diretório (se já não existir) chamado .ssh no diretório inicial do usuário remoto no host remoto.
  2. Nesse diretório, crie um arquivo chamado authorized_keys (se não existe já).
  3. No caso do seu controle remoto umask é mais liberal que o normal, torna o arquivo não gravável em grupo: chmod go-w ~/.ssh ~/.ssh/authorized_keys.
  4. Finalmente, de alguma forma copie (acrescente) o conteúdo do seu chave pública (~/.ssh/id_rsa.pub) no controle remoto ~/.ssh/authorized_keys Arquivo.

Carregue a chave no agente ssh

Se você carregar sua chave privada em um ssh agente, ele manterá a chave descriptografada na memória. Queremos que isso evite reinserir a senha sempre que entrarmos em um servidor.

Primeiro, o agente deve ser iniciado ou o caminho de um soquete de comunicação iniciado deve ser carregado em uma variável. Corrida ssh-agent em um terminal irá gerar comandos para atribuir e configurar as variáveis ​​do agente. Esses comandos podem ser salvos em um arquivo para uso em um terminal diferente. Como alternativa, pode-se executar esses comandos e esquecer de reutilizar o mesmo agente em outro terminal. por exemplo: eval $(ssh-agent).

Carregar a chave é uma questão simples de executar ssh-add e dando-lhe a frase secreta.

Se você estiver usando o GNOME, gnome-keyring-daemon geralmente fornece a mesma funcionalidade do agente SSH que o ssh-agent, portanto, você não precisa iniciar nada. O GNOME também carregará e desbloqueará automaticamente a chave no login.

Shell no servidor remoto sem uma senha

Se tudo foi feito corretamente, usando ssh usuário @ servidornão solicitará uma senha. Se algo estiver errado com o agente e não com a chave, você será solicitado a digitar a frase secreta da chave e não a senha da conta do usuário.

Qualquer coisa que use ssh para comunicação funcionará sem inserir a senha da conta do usuário quando a chave correta for carregada no agente. Programas como scp, sftp e rsync fazer uso disso.


Notas:

  • Você só precisa de uma chave SSHv2, pois o SSHv1 é muito inseguro e agora não é usado.
  • Você também precisa apenas de um tipo de chave - o RSA ou o DSA é suficiente. (O ed25519 e o ECDSA são recentes e, portanto, não são suportados em todos os lugares).
  • Todas essas etapas são as mesmas para as chaves RSA e DSA. Se você usa DSA, use id_dsa ao invés de id_rsae ECDSA terá id_ecdsa.
  • Servidores OpenSSH mais antigos que o 3.0 usados authorized_keys2 - mas é muito improvável que você encontre algo mais antigo que o 5.0 em uso.
  • Estas instruções aplicam-se apenas ao OpenSSH versão 3.0 e mais recente. lsh, ssh.come outros servidores SSH (Unix e não) não estão incluídos neste tutorial.

Exemplos:

  • Copiando a chave pública para um host remoto:

    ssh-copy-id -i ~ / .ssh / id_rsa.pub myaccount @ remotehost # isto
    
    cat ~ / .ssh / id_rsa.pub | ssh myaccount @ remotehost \
          'mkdir -p ~ / .ssh; cat >> ~ / .ssh / authorized_keys '# ou this
    
  • Salvando Variáveis ​​do Agente para Reutilização (exemplo elaborado)
    ssh-agent> ~ / .ssh / agente entre terminais
    . ~ / .ssh / cross-terminal-agent
    

152



ah, você tem que dizer "ssh-add {path-to-private-key-file}" e então ele pedirá sua senha. Por favor, torne isto mais explícito no seu post. Você também deve adicionar "Quarto, execute o ssh". Parte do problema com a documentação com essas coisas é que ele encobre etapas aparentemente óbvias que NÃO são óbvias para alguém novo no processo que não tem idéia do que está acontecendo e como esses programas funcionam juntos. - Jason S
Jason: ssh-add -l é verificar se um agente está em execução. ssh-add sem argumentos adicionará a chave da localização padrão (que é ~ / .ssh / id_rsa). De qualquer forma, atualizado. - grawity
há um comando ssh-copy-id que copia a chave pública para o host de destino e define as permissões automaticamente. - hasen
Ótima resposta! Falta um pouco sobre as permissões de arquivo dos arquivos de chave - eu só tive um problema relacionado a isso hoje. O arquivo de chave privada só deve ser acessível por mim, e o arquivo de chave pública deve ser apenas gravável por mim. - ripper234
Um forro: ssh-keygen -f ~/.ssh/id_rsa -N "";ssh-copy-id -i ~/.ssh/id_rsa username@server-ip-or-address (apenas substitua username@server-ip-or-address). - totymedli


Você não especificou em que Unix você está, em qual Unix você está se conectando, qual shell está usando, que variante SSH está usando, etc. Então, alguns destes podem precisar ser ajustados um pouco; isso é baseado em versões razoavelmente recentes do OpenSSH, que é usado em muitas variantes unix.

Isso tudo é do seu sistema de desktop local.

ssh-keygen

Certifique-se de usar o padrão para o nome da chave. eu sugiro que você Faz defina uma senha nessa chave, caso contrário, é um problema de segurança. "-t rsa" não seria uma má ideia, mas provavelmente não é necessária.

ssh-copy-id username@server

Isso lhe pedirá a senha que você usaria para efetuar login e configurará as coisas de authorized_keys para você. (não precisa fazer isso manualmente)

Então isso:

`ssh-agent`

ou talvez isso:

exec ssh-agent sh

ou:

exec ssh-agent bash

Isso iniciará um agente SSH que possa conter sua chave. Em muitas variantes modernas do Unix, se você estiver logado graficamente, isso já terá ocorrido. A primeira variante (com os backticks) coloca um agente ssh em segundo plano e configura as variáveis ​​de ambiente para conversar com ele. Os dois segundos fazem com que o agente execute um shell para você, para que, quando você sair do shell, o agente saia.

Muitas variantes modernas do Unix já terão um agente em execução para você, especialmente se você fizer login graficamente. Você pode tentar "ps aux | grep ssh-agent"ou"ps -ef | grep ssh-agent"; se algo já estiver rodando, use isso.

Então finalmente:

ssh-add

Ele pedirá uma frase secreta; Dê-lhe aquele que você deu ssh-keygen. Há também maneiras de fazê-lo perguntar graficamente. E você pode colocar o ssh-agent e o ssh-add em seus scripts de login (a configuração é diferente dependendo do shell que você usa) para automatizar isso, mas algumas variantes do Unix (Ubuntu Linux atual, por exemplo) fazem isso automaticamente, então que tudo o que você realmente precisa fazer é criar uma chave e usar ssh-copy-id para configurá-la no host remoto.

Agora, "ssh username@server"deve funcionar sem pedir qualquer autenticação. Nos bastidores, está usando uma chave que o agente ssh está segurando, e pedindo ao agente para fazer os truques de assinatura mágica para isso.


18





É possível fazer isso em PuTTY no Windows também.

Depois de configurar o par de chaves pública / privada (como mostram outras respostas), execute o PuttyGen. Lá, carregue a chave privada existente que você já configurou e salve-a como uma chave privada do PuTTY (ppk).

Em seguida, no PuTTY, basta clicar na sessão salva na qual deseja efetuar login automático e clicar em Carregar. A partir daqui, vá para Connection -> Data no painel esquerdo, e no tipo "Auto-login username" no nome de usuário para o servidor remoto:

PuTTY username entry

Depois disso, vá para Connection -> SSH -> Auth, e procure pelo ppk que você criou no PuttyGen:

PuTTY private key entry

Em seguida, volte para a página da sessão e salve a sessão que você carregou anteriormente.


11



O primeiro link da imagem, "Entrada do nome de usuário do PuTTY", parece estar quebrado. - Peter Mortensen
O PuTTY inclui sua própria versão do ssh-agent; chama-se Pageant. Ele é executado na bandeja do sistema e contém sua chave para você. Você não precisa executar o ssh-agent, basta marcar "Permitir encaminhamento de agentes" nas opções do PuTTY na seção Auth, e a conexão do Pageant será encaminhada para o terminal remoto para disponibilizar seu agente de chaves. - Kevin Panko


De uma pergunta muito semelhante sobre ServerFault, Eu recomendo usar ssh-copy-id, que executa todas as etapas envolvidas na configuração de chaves de autenticação para você:

ssh-copy-id é um script que usa ssh   para entrar em uma máquina remota   (presumivelmente usando uma senha de login, então   autenticação de senha deve ser   ativado, a menos que você tenha feito   uso inteligente de múltiplas identidades)

Também altera as permissões do   casa do usuário remoto, ~ / .ssh e   ~ / .ssh / authorized_keys para remover o grupo   escrita (o que, de outra forma,   impedir que você faça o login, se o   sshd remoto tem StrictModes definido em sua   configuração).

Se a opção -i for dada, então o   arquivo de identidade (o padrão é   ~ / .ssh / identity.pub) é usado,   independentemente de haver ou não   chaves no seu agente ssh.

Tudo o que você precisa fazer é simplesmente isto:

ssh-copy-id user@host

Digite sua senha uma vez e pronto!


3





Além de tudo já foi dito sobre como definir as chaves ssh, eu recomendo Chaveiro como um ssh-agent frontend do console que permite que você manipule apenas um por processo do sistema em vez de por login.

Eu sei que já existem ferramentas do GNOME e do KDE que fazem o mesmo, mas se você é o viciado em consola Digite isso é ótimo (e pode ser usado na maioria dos sistemas Unix).

Para usá-lo, basta anexar o seguinte ao seu ~/.bashrc (similar para outras conchas):

if type keychain >/dev/null 2>/dev/null; then
  keychain --nogui -q <all your SSH/PGP keys>
  [ -f ~/.keychain/${HOSTNAME}-sh ] && . ~/.keychain/${HOSTNAME}-sh
  [ -f ~/.keychain/${HOSTNAME}-sh-gpg ] && . ~/.keychain/${HOSTNAME}-sh-gpg
fi

3





http://linuxproblem.org/art_9.html

Seu alvo

Você quer usar o Linux e o OpenSSH para automatizar suas tarefas. Portanto, você precisa de um login automático do host A / user a para o Host B / user b. Você não deseja inserir senhas, porque deseja chamar ssh de um dentro de um shell script.


2



O voto para baixo não era meu, mas eu não me importaria que as pessoas deletassem sua resposta se notassem que alguém postou uma resposta quase parecida alguns momentos antes. - Arjan
Arjan: Na maioria das vezes eu concordo com você, mas quando as postagens são separadas por vários segundos, eu não acho necessariamente justo punir a pessoa em segundo lugar. Eu não estou dizendo que você tem que recompensá-los por votar, mas downvoting dá a impressão de que a resposta está errada, em vez de não no tempo - TheTXI


Eu escrevi este tutorial muito curto depois de ficar REALMENTE REALMENTE frustrado com tutoriais REALMENTE REALMENTE longos porque realmente é tão simples :)

test -f ~/.ssh/id_rsa.pub || ssh-keygen -t rsa #press enter twice if given prompts, then "ssh-add"

scp ~/.ssh/id_rsa.pub destID@destMachine:/tmp/ #type password

ssh destID@destMachine #type password

cat /tmp/id_rsa.pub >> ~/.ssh/authorized_keys

rm /tmp/id_rsa.pub

2





Massa de vidraceiro tem um -pw opção que permite criar um atalho na área de trabalho como este:

"C:\Program Files\PuTTY\putty.exe" -ssh user@192.168.2.2 -pw your_password

2