it-swarm.dev

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?

146
Richard Hoskins

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

Se acontecer de você usar o GNOME, o seahorse application ("Senhas e Chaves de Criptografia") pode fazer isso por você: File -> New -> Secure Shell Key.

Se você preferir terminal, execute 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. Disponível apenas em OpenSSH> = 6.5 .

O programa irá pedir-lhe uma passphrase e uma localização onde guardar 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, seahorse geralmente pode fazer isso por você - em My Personal Keys, clique com o botão direito na sua chave SSH e escolha Configure key for secure Shell.

Ou ssh-copy-id -i ~/.ssh/id_rsa.pub [email protected] 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 já não existir).
  3. Caso o seu controle remoto umask seja mais liberal que o normal, faça 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 da sua chave pública (~/.ssh/id_rsa.pub) local no arquivo ~/.ssh/authorized_keys remoto.

Carregue a chave no agente ssh

Se você carregar sua chave privada em um ssh agent, ela 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. Executando 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 simples questão de executar ssh-add e passar a senha.

Se você estiver usando o GNOME, gnome-keyring-daemon geralmente fornece a mesma funcionalidade do agente SSH que o ssh-agent, então 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, usar ssh [email protected] nã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 de usuário quando a chave correta for carregada no agente. Programas como scp , sftp e rsync fazem 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ê usar o DSA, use id_dsa em vez de id_rsa, e o ECDSA terá id_ecdsa.
  • Servidores OpenSSH mais antigos que o 3.0 usaram authorized_keys2 - mas é muito improvável que você encontre algo mais antigo que 5.0 em uso.
  • Estas instruções aplicam-se apenas ao OpenSSH versão 3.0 e mais recente. lsh, ssh.com e outros (Unix e não) servidores SSH 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 isto 
    
  • Salvando variáveis ​​do agente para reutilização (exemplo elaborado)
     ssh-agent> ~/.ssh/agente entre terminais 
    . ~/.ssh/cross-terminal-agent 
    
159
grawity

Você não especificou em que Unix você está, em que Unix você está se conectando, qual Shell está usando, que variante SSH está usando, etc. Então, alguns desses ajustes podem precisar ser ajustados; 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. Sugiro que você faça defina uma frase-senha nessa chave, caso contrário, é um problema de segurança. "-t rsa" não seria uma má idéia, mas provavelmente não é necessária.

ssh-copy-id [email protected]

Isso lhe pedirá a senha que você usaria para fazer 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 funcionando 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 (atual Ubuntu Linux, por exemplo) fazem mais disso 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 [email protected]" deve funcionar sem solicitar nenhuma 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 ele.

22
freiheit

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

Depois de ter configurado 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 você deseja fazer o 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 do 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
スーパーファミコン

De uma questão muito semelhante em ServerFault , eu recomendo usar ssh-copy-id , que faz todas as etapas envolvidas com a configuração de chaves de autenticação para você:

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

Ele também altera as permissões da home do usuário remoto, ~/.ssh e ~/.ssh/authorized_keys para remover a capacidade de gravação do grupo (o que impediria você de efetuar login, se o sshd remoto tiver o StrictModes configurado em sua configuração).

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

Tudo o que você precisa fazer é simplesmente isto:

ssh-copy-id [email protected]

Digite sua senha uma vez e pronto!

3
Chris Bunch

Além de todos os que já foram informados sobre como configurar as chaves ssh, eu recomendo Keychain como um ssh-agent console frontend que permite manipular apenas um por processo de 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 console type, isso é ótimo (e pode ser usado na maioria dos sistemas Unix).

Para usá-lo, basta acrescentar o seguinte ao seu ~/.bashrc (similar para outros shells):

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
scetoaux

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

"C:\Program Files\PuTTY\putty.exe" -ssh [email protected] -pw your_password
2
Genc Hosting

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 [email protected]:/tmp/ #type password

ssh [email protected] #type password

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

rm /tmp/id_rsa.pub
2
samthebest

http://linuxproblem.org/art_9.html

Seu objetivo

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 você quer chamar o ssh de dentro de um script Shell.

2
TheTXI
  1. No host de conexão, execute ssh-keygen. (Se ele disser que você precisa especificar um tipo, faça ssh-keygen -t rsa.) Quando ele solicitar uma localização de arquivo, use o padrão. Quando lhe pedir uma senha, pressione Enter para não passar a senha.
  2. cat ~/.ssh/id_rsa.pub (ou qualquer que seja a localização do arquivo padrão em ssh-keygen, embora você tenha que ter uma instalação really old ssh para que ela seja diferente); copie a saída para sua área de transferência.
  3. Faça login normalmente no host de destino como a conta à qual você deseja se conectar. Edite o arquivo ~/.ssh/authorized_keys (se ~/.ssh não existir, slogin para someplace; esta é a maneira simples e fácil de obtê-lo criado com as permissões corretas). Cole sua área de transferência (contendo o id_rsa.pub do outro Host) neste arquivo.
1
chaos

Se você quiser fazer tudo no terminal no Linux:

no host

cd ~/.ssh /

ssh-keygen -t {rsa | dsa} -b {1024 | 2048 | 4096} -C "algum texto de comentário se você quiser" -f id_ArbitraryName

Os itens no {} são opções, use rsa ou dsa e escolha o tamanho do bit (maior é mais seguro)

Em seguida, você precisa adicionar as permissões aos arquivos authorized_keys e authorized_keys2.

cat id_ArbitraryName.pub >> authorized_keys

cat id_AribtraryName.pub >> authorized_keys2

Em seguida, baixe o arquivo id_AribtraryName para a caixa que você deseja ssh. Se a caixa de conexão for baseada em unix, um arquivo de configuração pode ser necessário (no PuTTY, alguém acima disso).

na caixa de conexão

No seu arquivo de configuração - vim ~/.ssh/config

Anfitrião example.Host.com # ou o nome do seu computador

Usuário username

IdentityFile ~/.ssh/id_ArbitraryName

O arquivo de configuração precisa de permissões de 600. A pasta SSh precisa de 700.

Espero que ajude se você se deparar com o problema de configuração que é omitido muito.

0
nerdwaller