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?
Como posso configurar o SSH para não ter de digitar a minha palavra-passe quando me ligo a um anfitrião?
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:
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.
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:
.ssh
no directório home do utilizador remoto no anfitrião remoto. authorized_keys
(se ainda não existir). 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
. ~/.ssh/id_rsa.pub
) para o ficheiro remoto ~/.ssh/authorized_keys
. 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.
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.
id_dsa
em vez de id_rsa
, e ECDSA terá id_ecdsa
.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. 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
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.
É 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.
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!
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
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
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.
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
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. 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. ~/.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.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.