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

137

Como configuro o SSH para não precisar digitar minha senha ao me conectar a um host?

    
por Richard Hoskins 18.07.2009 / 18:51

10 respostas

153

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

Se acontecer de você usar o GNOME, o aplicativo cavalo-marinho ("Senhas e chaves de criptografia") pode fazer isso por você: Arquivo - > Novo - > 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 somente em OpenSSH > = 6.5 .

O programa solicitará uma senha longa 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á.

Envie a chave pública para o servidor remoto

Mais uma vez, o cavalo-marinho pode fazer isso por você - em My Personal Keys , clique com o botão direito na 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 ainda não existir).
  3. Caso seu controle remoto umask seja mais liberal que o normal, deixe o arquivo não gravável em grupo: chmod go-w ~/.ssh ~/.ssh/authorized_keys .
  4. Finalmente, copie (anexando) o conteúdo da sua chave pública local ( ~/.ssh/id_rsa.pub ) no arquivo ~/.ssh/authorized_keys remoto.

Carregue a chave no agente ssh

Se você carregar sua chave privada em um agente ssh , 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. Executar o ssh-agent em um terminal 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, o gnome-keyring-daemon geralmente fornece a mesma funcionalidade de 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 user@server 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 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 .
  • Os servidores OpenSSH anteriores ao 3.0 usaram authorized_keys2 - mas é improvável que você encontre algo com mais de 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       # this
    
    cat ~/.ssh/id_rsa.pub | ssh myaccount@remotehost \
          'mkdir -p ~/.ssh ; cat >> ~/.ssh/authorized_keys'     # or this
    
  • Salvando variáveis do agente para reutilizar (exemplo elaborado)
    ssh-agent > ~/.ssh/cross-terminal-agent
    . ~/.ssh/cross-terminal-agent
    
por 01.05.2015 / 04:30
18

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 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 área de trabalho local.

ssh-keygen

Certifique-se de usar o padrão para o nome da chave. Sugiro que você faça uma senha para essa chave, caso contrário, é um problema de segurança. "-t rsa" não seria uma má idéia, mas provavelmente não é necessário.

ssh-copy-id username@server

Isso 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 em funcionamento 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 solicitar 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.

    
por 21.08.2009 / 00:18
11

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

Uma vez que você tenha 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 deseja fazer o login automático e clicar em Carregar. A partir daqui, vá para Conexão - > Dados no painel esquerdo e no tipo "Nome de usuário de login automático" no nome de usuário desse servidor remoto:

Depoisdisso,váparaConexão->SSH->AuthenaveguepeloppkquevocêcriounoPuttyGen:

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

    
por 29.09.2011 / 06:56
3

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

ssh-copy-id is a script that uses ssh to log into a remote machine (presumably using a login password, so password authentication should be enabled, unless you've done some clever use of multiple identities)

It also changes the permissions of the remote user's home, ~/.ssh, and ~/.ssh/authorized_keys to remove group writability (which would otherwise prevent you from logging in, if the remote sshd has StrictModes set in its configuration).

If the -i option is given then the identity file (defaults to ~/.ssh/identity.pub) is used, regardless of whether there are any keys in your ssh-agent.

Tudo o que você precisa fazer é simplesmente isto:

ssh-copy-id user@host

Digite sua senha uma vez e pronto!

    
por 13.04.2017 / 14:14
3

Além de todos os que já foram informados sobre como definir as chaves ssh, eu recomendo Chaveiro como um front-end do console do ssh-agent 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ê é do tipo console junkie , isso é ótimo (e pode ser usado na maioria dos sistemas Unix).

Para usá-lo, basta anexar o seguinte ao seu ~/.bashrc (semelhante 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
    
por 10.08.2011 / 00:26
2

link

Your aim

You want to use Linux and OpenSSH to automize your tasks. Therefore you need an automatic login from host A / user a to Host B / user b. You don't want to enter any passwords, because you want to call ssh from a within a shell script.

    
por 18.07.2009 / 18:55
2

Eu escrevi este tutorial bem curto depois de ficar REALMENTE REALMENTE frustrado com tutoriais REALMENTE REALMENTE longos, porque é muito 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
    
por 01.02.2013 / 18:26
2

Putty tem um -pw opção que permite criar um atalho na área de trabalho assim:

"C:\Program Files\PuTTY\putty.exe" -ssh [email protected] -pw your_password
    
por 01.06.2014 / 01:51
1
  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 o local do arquivo padrão em ssh-keygen , embora você tenha que ter um realmente antigo ssh install para que 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 algum lugar; essa é a maneira simples e fácil de criá-lo com as permissões corretas). Cole sua área de transferência (contendo o id_rsa.pub do outro host) neste arquivo.
por 18.07.2009 / 19:06
0

Se você quiser fazer tudo no terminal no Linux:

No host

cd ~/.ssh/

ssh-keygen -t {rsa|dsa} -b {1024|2048|4096} -C "some comment text if you want" -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, faça o download do arquivo id_AribtraryName para a caixa da qual você deseja ssh. Se a caixa de conexão for baseada em unix, um arquivo de configuração pode ser necessário (em massa, alguém acima disso).

Na caixa de conexão

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

Host example.host.com # or your computer name

User 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ê encontrar o problema de configuração que é omitido muito.

    
por 25.10.2012 / 14:34

Tags