2009-07-18 16:51:50 +0000 2009-07-18 16:51:50 +0000
155
155

Como posso configurar o SSH para não ter de digitar a minha palavra-passe?

Como posso configurar o SSH para não ter de digitar a minha palavra-passe quando me ligo a um anfitrião?

Respostas (10)

167
167
167
2009-07-18 17:36:45 +0000

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

Se por acaso utilizar GNOME, a aplicação seahorse* (“Passwords and Encryption Keys”) pode fazê-lo por si: Arquivo -> Novo -> Chave de Concha Segura.

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

  • rsa: o padrão & - dsa: mais ou menos equivalente, excepto restrito a chaves de 1024 bits
  • ecdsa: a mesma segurança com chaves mais pequenas, mas relativamente novas e um pouco raras no software SSH.
  • ed25519: alta segurança (mais resistente a ataques de canais laterais e geradores de números aleatórios fracos). Geração muito rápida de assinaturas. Muito novo. Apenas disponível em OpenSSH >= 6,5 .

O programa pedir-lhe-á uma frase-senha e um local onde guardar a nova chave. Recomenda-se a utilização do caminho padrão sugerido, porque todas as outras ferramentas o procurarão ali.

Carregue a chave pública para o servidor remoto

Novamente, seahorse* pode frequentemente fazer isso por si - em Minhas Chaves Pessoais, clique com o botão direito do rato na sua chave SSH e escolha Configurar chave para shell segura.

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

Ou, completamente manual passo a passo:

  1. Crie um directório (se ainda não existir) nomeado .ssh no directório home do utilizador remoto no anfitrião remoto.
  2. Nesse directório, criar um ficheiro com o nome authorized_keys (se ainda não existir).
  3. No caso do seu umask& remoto ser mais liberal do que o habitual, faça com que o ficheiro não possa ser escrito em grupo: chmod go-w ~/.ssh ~/.ssh/authorized_keys.
  4. Finalmente, de alguma forma copie (anexe) o conteúdo da sua chave local pública (~/.ssh/id_rsa.pub) para o ficheiro remoto ~/.ssh/authorized_keys.

Carregue a chave para o agente ssh

Se carregar a sua chave privada num ssh agente, ele guardará a chave decifrada na memória. Queremos que isto evite reintroduzir a palavra-passe sempre que se encontre num servidor.

Primeiro, o agente deve ser iniciado ou o caminho de uma tomada de comunicação lançada deve ser carregado numa variável. A execução de ssh-agente num terminal irá gerar comandos para a atribuição e definição das variáveis do agente. Estes comandos podem ser guardados num ficheiro para utilização num terminal diferente. Em alternativa, pode-se executar estes comandos e esquecer a reutilização do mesmo agente noutro terminal. por exemplo: eval $(ssh-agent).

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

Se estiver a utilizar GNOME, gnome-keyring-daemon normalmente fornece a mesma funcionalidade de agente SSH que o ssh-agent, pelo que não deverá precisar de iniciar nada. O GNOME também carregará e desbloqueará automaticamente a chave no início de sessão.

Shell no servidor remoto sem password

Se tudo foi feito correctamente, o uso de ssh user@server não lhe pedirá uma password. Se algo estiver errado com o agente e não com a chave, ser-lhe-á pedido que introduza a frase de passe para a chave, e não a palavra-passe para a conta de utilizador.

Qualquer coisa que utilize ssh para comunicação funcionará sem introduzir a palavra-chave da conta de utilizador quando a chave correcta for carregada no agente. Programas tais como scp* , sftp* e rsync* fazem uso disto.


Notas:

  • Só precisa de uma chave SSHv2, pois o SSHv1 é muito inseguro e agora não é utilizado. & - Também só precisa de um tipo de chave - ou RSA ou DSA é suficiente. (ed25519 e ECDSA são ambas recentes e, portanto, não são suportadas em todo o lado).
  • Todas estas etapas são as mesmas tanto para as chaves RSA como DSA. Se usar DSA, use id_dsa em vez de id_rsa, e ECDSA terá id_ecdsa.
    & - Servidores OpenSSH mais antigos que 3,0 usaram authorized_keys2& - mas é realmente improvável que encontre algo mais antigo que 5,0 em uso. & - Estas instruções aplicam-se apenas à versão OpenSSH 3.0 e mais recente. lsh, ssh.com, e outros servidores SSH (Unix e não) não estão incluídos neste tutorial.

Exemplos:

  • Cópia da chave pública para um servidor remoto:

  • Salvar variáveis do agente para reutilização (exemplo elaborado) ssh-agent \> ~/.ssh/cross-terminal-agent . ~/.ssh/cross-terminal-agent

22
22
22
2009-07-18 17:28:34 +0000

Não especificou em que Unix está a usar, a que Unix está a ligar-se, a que shell está a usar, que variante SSH está a usar, etc. Por isso, parte disto pode precisar de ser ligeiramente ajustado; isto é baseado em versões razoavelmente recentes do OpenSSH, que é usado em muitas variantes unix.

Isto é tudo a partir do seu sistema desktop local.

ssh-keygen

Certifique-se de usar a predefinição do nome-chave. Sugiro que do defina uma frase-chave, caso contrário é um problema de segurança. A “-t rsa” não seria uma má ideia, mas provavelmente não é necessária.

ssh-copy-id username@server

Que lhe pedirá a palavra-passe que usaria para fazer o login, e que lhe instalará as chaves de acesso autorizadas. (não é necessário fazê-lo à mão)

Então, isto:

`ssh-agent`

ou talvez isto:

exec ssh-agent sh

ou talvez isto:

exec ssh-agent bash

ou

ssh-add

Que irá iniciar um agente SSH que pode segurar a sua chave. Em muitas variantes Unix modernas, se estiver logado graficamente, isto já terá tido lugar. A primeira variante (com os backticks) coloca um agente ssh em segundo plano e configura as variáveis de ambiente para falar com ele. As duas segundas fazem com que o agente execute uma shell para si, para que quando sair da shell, o agente saia.

Muitas variantes Unix modernas já terão um agente a correr para si, especialmente se tiver feito o log in graficamente. Poderá tentar “ps aux | grep ssh-agent” ou “ps -ef | grep ssh-agent”; se algo já estiver a correr, use isso.

Depois, finalmente:

0x1&

Pedirá uma frase-chave; dê-lhe a frase-chave que deu ssh-keygen. Há também maneiras de o fazer pedir graficamente. E pode colocar o ssh-agent e ssh-add nos seus scripts de login (a configuração é diferente dependendo da shell que utiliza) para automatizar isto, mas algumas variantes Unix (Ubuntu Linux actual, por exemplo) fazem a maior parte disso automaticamente, de modo que tudo o que realmente precisa de fazer é criar uma chave e usar o ssh-copy-id para a configurar no anfitrião remoto.

Agora, “ssh username@server” deve funcionar sem pedir qualquer autenticação. Nos bastidores, é usar uma chave que o ssh-agente está a segurar, e pedir ao agente que faça os truques de assinatura mágica para isso.

11
11
11
2009-07-25 03:42:47 +0000

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

Uma vez que tenha o par de chaves públicas/privadas todas configuradas (como outras respostas aqui mostram) corra PuttyGen. Aí, carregue a chave privada existente que já configurou, e depois guarde-a como uma chave privada PuTTY (ppk).

Depois, em PuTTY, basta clicar na sessão guardada para a qual deseja auto-login e clicar em Load. A partir daqui, entre em Ligação -> Dados no painel esquerdo, e em “Auto-login username” escreva o nome de utilizador para esse servidor remoto:

Depois disso, vá para Connection -> SSH -> Auth, e procure as ppk que fez em PuttyGen:

Depois volte para a página da sessão e guarde a sessão que carregou anteriormente.

3
3
3
2009-07-18 17:39:21 +0000

A partir de uma pergunta muito semelhante sobre ServerFault , eu recomendaria o uso de ssh-copy-id , que faz todos os passos envolvidos na configuração de chaves de autenticação para si:

ssh-copy-id é um script que utiliza ssh para iniciar sessão numa máquina remota (presumivelmente utilizando uma palavra-passe de início de sessão, pelo que a autenticação por palavra-passe deve ser activada, a menos que tenha feito algum uso inteligente de múltiplas identidades)

& > Altera também as permissões da casa do utilizador remoto, ~/. ssh, e ~/.ssh/authorized_keys to remove group writability (que de outra forma o impediria de iniciar sessão, se o sshd remoto tiver StrictModes definido na sua configuração).

Se a opção -i for dada, então o ficheiro de identidade (por defeito ~/.ssh/identity.pub) é utilizado, independentemente da existência ou não de chaves no seu ssh-agente.

Tudo o que precisa de fazer é simplesmente isto:

ssh-copy-id user@host

Digite a sua senha uma vez, e está pronto para ir!

3
3
3
2009-07-18 17:57:35 +0000

Para além de tudo o que já foi dito sobre como definir chaves ssh, recomendo Keychain como um ssh-agent front-end de consola que lhe permite tratar apenas uma por processo de sistema em vez de por login.

Eu sei que já existem ferramentas GNOME e KDE que fazem o mesmo mas se for do tipo console junkie isto é óptimo (e pode ser usado na maioria dos sistemas Unix).

Para o utilizar, 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
2
2
2
2013-02-01 16:58:45 +0000

Escrevi este tutorial muito curto depois de ficar REALMENTE frustrado com tutoriais REALMENTE longos porque na realidade é 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
2
2
2009-07-18 16:55:59 +0000

http://linuxproblem.org/art_9.html

Seu objectivo & > Quer utilizar Linux e OpenSSH para automatizar as suas tarefas. Portanto, precisa de um login automático do anfitrião A / utilizador a para o anfitrião B / utilizador b. Não quer introduzir nenhuma palavra-passe, porque quer chamar ssh a partir de um script dentro de uma shell.

2
2
2
2012-12-02 23:11:47 +0000

Putty* tem uma opção -pw que lhe permite criar um atalho no ambiente de trabalho como este:

"C:\Program Files\PuTTY\putty.exe" -ssh user@192.168.2.2 -pw your_password
1
1
1
2009-07-18 17:06:33 +0000
  1. No anfitrião de ligação, correr ssh-keygen. (Se lhe disser que tem de especificar um tipo, faça ssh-keygen -t rsa.) Quando lhe pedir a localização de um ficheiro, faça o padrão. Quando lhe pedir uma frase-chave, carregue em enter para não ter uma frase-chave.
  2. cat ~/.ssh/id_rsa.pub (ou qualquer que seja a localização por defeito do ficheiro em ssh-keygen, embora tivesse de ter uma really old ssh instalar para que fosse diferente); copie a saída para a sua área de transferência.
  3. Entre normalmente no host de destino como a conta a que se quer ligar. Edite o ficheiro ~/.ssh/authorized_keys (se ~/.ssh não existir, slogin para algum lugar; esta é a forma simples e fácil de o criar com as permissões certas). Cole a sua prancheta (contendo o id_rsa.pub a partir do outro hospedeiro) neste ficheiro.
0
0
0
2012-10-25 12:27:48 +0000

Se 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 quiser” -f id_ArbitraryName

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

Depois precisa de adicionar as permissões aos ficheiros das teclas autorizadas e das teclas autorizadas_2.

cat id_ArbitraryName.pub >> authorized_keys

cat id_AribtraryName.pub >> authorized_keys2

Depois descarregue o ficheiro id_AribtraryName para a caixa de onde pretende ssh. Se a caixa de ligação for baseada em unix, pode ser necessário um ficheiro de configuração (em putty, alguém acima cobriu isso).

Na caixa de ligação

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

Host example.host.com # ou o nome do seu computador

User username

IdentityFile ~/.ssh/id_ArbitraryName

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

Esperança que ajuda se se deparar com o problema de configuração que é omitido muitas vezes.