Como configuro o SSH para não precisar digitar minha senha ao me conectar a um host?
~/.ssh/config
que agora é necessária PubkeyAcceptedKeyTypes ssh-rsa*,ssh-dss*
Como configuro o SSH para não precisar digitar minha senha ao me conectar a um host?
~/.ssh/config
que agora é necessária PubkeyAcceptedKeyTypes ssh-rsa*,ssh-dss*
Respostas:
Se você usa o GNOME, o aplicativo de cavalos - marinhos ("Senhas e chaves de criptografia") pode fazer isso por você: Arquivo -> Novo -> Chave do Secure Shell .
Se você preferir o terminal, execute para gerar um par de chaves. Os tipos de pares de chaves válidos são:ssh-keygen -t <type>
O programa solicitará uma senha e um local para salvar a nova chave. É recomendável usar o caminho padrão sugerido porque todas as outras ferramentas o procurarão lá.
Novamente, o cavalo-marinho geralmente pode fazer isso por você - em Minhas Chaves Pessoais , clique com o botão direito do mouse na sua chave SSH e escolha Configurar chave para um shell seguro .
Ou, ssh-copy-id -i ~/.ssh/id_rsa.pub remote-user@remote-host
no terminal.
Ou, completamente manualmente, passo a passo:
.ssh
no diretório inicial do usuário remoto no host remoto.authorized_keys
(se ele já não existir).umask
é mais liberal do que o normal, tornar o arquivo não agrupar-gravável: chmod go-w ~/.ssh ~/.ssh/authorized_keys
.~/.ssh/id_rsa.pub
) no ~/.ssh/authorized_keys
arquivo remoto .Se você carregar sua chave privada em um agente ssh , ela manterá a chave descriptografada na memória. Queremos que isso evite redigitar 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. A execução do 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, é possível executar esses comandos e esquecer a reutilização do mesmo agente em outro terminal. por exemplo: eval $(ssh-agent)
.
Carregar a chave é uma questão simples de executar ssh-add
e fornecer a frase secreta.
Se você estiver usando o GNOME, o gnome-keyring-daemon geralmente fornece a mesma funcionalidade de agente SSH que o ssh-agent, portanto, você não precisa iniciar nada. O GNOME irá carregar e desbloquear automaticamente a chave no login também.
Se tudo foi feito corretamente, o uso 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.ssh user@server
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 fazem uso disso.
id_dsa
vez de id_rsa
e o ECDSA terá id_ecdsa
.authorized_keys2
- mas é muito improvável que você encontre algo anterior ao 5.0 em uso.lsh
, ssh.com
E outros (Unix e não) servidores SSH não estão incluídos neste tutorial.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 / allowed_keys '# ou este
ssh-agent> ~ / .ssh / agente de terminal cruzado . ~ / .ssh / agente de terminal cruzado
ssh-copy-id
que copia a chave pública para o host de destino e define as permissões automaticamente.
ssh-keygen -f ~/.ssh/id_rsa -N "";ssh-copy-id -i ~/.ssh/id_rsa username@server-ip-or-address
(basta substituir username@server-ip-or-address
).
Você não especificou em que Unix está, em que Unix está se conectando, em qual shell está usando, qual variante SSH está usando etc. Então, isso pode precisar ser ligeiramente ajustado; isso é baseado em versões razoavelmente recentes do OpenSSH, que são usadas em muitas variantes do 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ê faça definir uma senha nessa tecla, 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 solicitará a senha que você usaria para efetuar o login e configurará o material allowed_keys para você. (não é necessário fazê-lo manualmente)
Então isso:
`ssh-agent`
ou talvez isso:
exec ssh-agent sh
ou:
exec ssh-agent bash
Isso iniciará um agente SSH que pode manter 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ê; assim, quando você sai do shell, o agente sai.
Muitas variantes modernas do Unix já terão um agente em execução para você, especialmente se você efetuou login graficamente. Você pode tentar " ps aux | grep ssh-agent
" ou " ps -ef | grep ssh-agent
"; se algo já estiver em execução, use isso.
Então finalmente:
ssh-add
Ele solicitará uma senha; dê o que você deu ao ssh-keygen. Também há maneiras de fazer isso perguntar graficamente. E você pode colocar as coisas ssh-agent e ssh-add em seus scripts de login (a configuração é diferente dependendo do shell usado) para automatizar isso, mas algumas variantes do Unix (atual Linux Linux, por exemplo) fazem a maioria disso automaticamente, então 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 nenhuma autenticação. Nos bastidores, está usando uma chave que o ssh-agent está segurando e pedindo ao agente que faça os truques de assinatura mágica para ele.
Também é possível fazer isso no PuTTY no Windows.
Depois de configurar o par de chaves pública / privada (como outras respostas aqui mostram), execute o PuttyGen. Lá, carregue a chave privada existente que você já configurou e salve-a como uma chave privada PuTTY (ppk).
Em seguida, no PuTTY, basta clicar na sessão salva na qual deseja efetuar login automaticamente e clicar em Carregar. A partir daqui, vá para Conexão -> Dados no painel esquerdo e, em "Nome de usuário com login automático", digite o nome de usuário para esse servidor remoto:
Depois disso, vá para Connection -> SSH -> Auth e procure o ppk que você criou no PuttyGen:
Volte para a página da sessão e salve a sessão que você carregou anteriormente.
Em uma pergunta muito semelhante no ServerFault , recomendo usar o 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 efetuar login em uma máquina remota (presumivelmente usando uma senha de login, portanto a autenticação por senha deve ser ativada, a menos que você tenha feito algum uso inteligente de várias identidades)
Ele também altera as permissões da página inicial do usuário remoto, ~ / .ssh e ~ / .ssh / allowed_keys para remover a capacidade de gravação do grupo (o que impediria o login, se o sshd remoto tiver StrictModes definido 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 ssh-agent.
Tudo que você precisa fazer é simplesmente isso:
ssh-copy-id user@host
Digite sua senha uma vez e pronto!
Além de tudo que já foi dito sobre como definir chaves ssh, eu recomendo o Keychain como um front end do console do ssh-agent, que permite que você lide com apenas um por processo do sistema em vez de por login.
Eu sei que já existem ferramentas GNOME e KDE que fazem o mesmo, mas se você é do tipo viciado em console, isso é ótimo (e pode ser usado na maioria dos sistemas Unix).
Para usá-lo, basta anexar o seguinte ao seu ~/.bashrc
(semelhante 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
http://linuxproblem.org/art_9.html
Seu alvo
Você deseja usar o Linux e o OpenSSH para automatizar suas tarefas. Portanto, você precisa de um login automático do host A / usuário a para Host B / usuário b. Você não deseja inserir nenhuma senha, porque deseja chamar ssh de um script shell.
Eu escrevi este tutorial muito curto depois de ficar MUITO frustrado com MUITO REALMENTE longos tutoriais 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
ssh-keygen
. (Se indicar que você precisa especificar um tipo, faça ssh-keygen -t rsa
.) Quando solicitar um local para o arquivo, escolha o padrão. Quando solicitar uma senha, pressione enter para não usar a senha.cat ~/.ssh/id_rsa.pub
(ou qualquer que seja o local padrão do arquivo ssh-keygen
, embora você precise ter uma instalação muito antiga ssh
para que seja diferente); copie a saída para a área de transferência.~/.ssh/authorized_keys
(se ~/.ssh
não existir, slogin
em algum lugar; esta é a maneira simples e fácil de criar com as permissões corretas). Cole sua área de transferência (contendo a id_rsa.pub
do outro host) neste arquivo.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 desejar" -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 allowed_keys e allowed_keys2.
gato id_ArbitraryName.pub >> chaves_autorizadas
cat id_AribtraryName.pub >> allowed_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 o cobriu).
Na caixa de conexão
No seu arquivo de configuração - vim ~ / .ssh / config
Host example.host.com # ou o nome do seu computador
Nome de usuário do usuário
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 é muito omitido.