Alguém pode argumentar se o uso dessas chaves não requer uma senha. Para evitar que alguém que se apossar da sua chave privada possa realmente abusá-la, é possível proteger a chave com uma senha própria. Obviamente, pode-se deixar essa senha em branco, mas há muitos casos em que isso não seria recomendado.
Arjan
Na última Cygwin com a mais recente SSH, eu estava sendo re-solicitado porque eu precisava fazer uma mudança para o meu ~/.ssh/configque agora é necessária PubkeyAcceptedKeyTypes ssh-rsa*,ssh-dss*
HDave
Respostas:
164
Gere uma chave SSH (se você não tiver uma)
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>
rsa: o padrão
dsa: equivalente mais ou menos, exceto restrito a chaves de 1024 bits
ecdsa: mesma segurança com chaves menores, mas relativamente nova e um tanto 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 no OpenSSH> = 6.5 .
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á.
Carregar a chave pública no servidor remoto
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 .
Crie um diretório (se ainda não existir) nomeado .sshno diretório inicial do usuário remoto no host remoto.
Nesse diretório, crie um arquivo chamado authorized_keys(se ele já não existir).
No caso seu controle remoto umaské mais liberal do que o normal, tornar o arquivo não agrupar-gravável: chmod go-w ~/.ssh ~/.ssh/authorized_keys.
Por fim, copie (anexe) o conteúdo da sua chave pública local ( ~/.ssh/id_rsa.pub) no ~/.ssh/authorized_keysarquivo 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 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-adde 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.
Shell no servidor remoto sem senha
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.
Notas:
Você só precisa de uma chave SSHv2, pois o SSHv1 é muito inseguro e agora não utilizado.
Você também precisa apenas de um tipo de chave - RSA ou DSA é suficiente. (ed25519 e 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ê usa o DSA, use em id_dsavez de id_rsae o ECDSA terá id_ecdsa.
Os servidores OpenSSH anteriores ao 3.0 foram usados authorized_keys2- mas é muito improvável que você encontre algo anterior ao 5.0 em uso.
Estas instruções se aplicam apenas ao OpenSSH versão 3.0 e mais recente. lsh, ssh.comE outros (Unix e não) servidores SSH não estão incluídos neste tutorial.
ah, você precisa dizer "ssh-add {caminho para o arquivo-chave-privado}" e solicitará sua senha. Por favor, torne isso mais explícito em sua postagem. Você também deve adicionar "Quarto, execute ssh". Parte do problema com a documentação desse material é que ela encobre etapas aparentemente óbvias que NÃO são óbvias para alguém novo no processo que não tem idéia do que está acontecendo e como esses programas funcionam juntos.
Jason S
1
Jason: ssh-add -l é para verificar se um agente está em execução. O ssh-add sem argumentos adicionará a chave do local padrão (que é ~ / .ssh / id_rsa). Enfim, atualizado.
#
4
existe um comando ssh-copy-idque copia a chave pública para o host de destino e define as permissões automaticamente.
hasen
1
Ótima resposta! Está faltando um pouco nas permissões dos arquivos principais - eu só tive um problema relacionado a isso hoje. O arquivo de chave privada só deve ser acessível por mim e o arquivo de chave pública deve ser gravável apenas por mim.
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.
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.
O primeiro link da imagem, "PuTTY username entry", parece estar quebrado.
22640 Peter Mortensen
2
O PuTTY inclui sua própria versão do ssh-agent; chama-se Pageant. Ele roda na bandeja do sistema e segura sua chave para você. Você nunca precisa executar o ssh-agent, basta marcar "Permitir encaminhamento do agente" nas opções do PuTTY na seção Auth, e a conexão do Pageant será encaminhada para o terminal remoto para disponibilizar seu agente-chave.
22410 Kevin Panko
3
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.
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
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.
O voto negativo não foi meu, mas eu não me importaria de as pessoas excluirem sua resposta se notassem que alguém postou uma resposta quase semelhante alguns momentos antes.
Arjan
2
Arjan: Na maioria das vezes, eu concordo com você, mas quando as postagens são separadas apenas por alguns segundos, não necessariamente acho justo punir a pessoa em segundo lugar. Não estou dizendo que você tem que recompensá-los por upvoting, mas downvoting dá a impressão de que a resposta é errada, em vez de não a tempo
TheTXI
2
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
No host de conexão, execute 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 sshpara que seja diferente); copie a saída para a área de transferência.
Efetue login normalmente no host de destino como a conta à qual você deseja se conectar. Edite o arquivo ~/.ssh/authorized_keys(se ~/.sshnão existir, sloginem 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.pubdo outro host) neste arquivo.
-1 por sugerir não adicionar senha. Sem uma senha, qualquer pessoa que esteja lendo o arquivo agora pode se passar por um usuário legítimo.
22449 bortzmeyer
2
Primeiro, ele pediu para não precisar digitar sua senha; Eu realmente não acho que ter que digitar uma senha em vez da senha dele seria uma melhoria. Segundo, você está errado; é por isso que existe uma chave pública e uma chave privada, para que a chave pública possa estar no mundo.
caos
A senha em questão é digitada durante a geração da chave, nem sempre que você se conecta. Corrigir?
Richard Hoskins
Não. As chaves geradas com uma frase secreta exigem que a senha seja inserida toda vez que a chave é usada.
caos
2
Errado. Com o ssh-agent (consulte a resposta aceita), você digita a senha apenas uma vez por sessão.
22449 bortzmeyer
0
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.
~/.ssh/config
que agora é necessáriaPubkeyAcceptedKeyTypes ssh-rsa*,ssh-dss*
Respostas:
Gere uma chave SSH (se você não tiver uma)
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á.
Carregar a chave pública no servidor remoto
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 .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 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.
Shell no servidor remoto sem senha
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.
Notas:
id_dsa
vez deid_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.Exemplos:
Copiando a chave pública para um host remoto:
fonte
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 substituirusername@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.
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.
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:
ou talvez isso:
ou:
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:
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.fonte
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.
fonte
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ê:
Tudo que você precisa fazer é simplesmente isso:
Digite sua senha uma vez e pronto!
fonte
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):fonte
http://linuxproblem.org/art_9.html
fonte
Eu escrevi este tutorial muito curto depois de ficar MUITO frustrado com MUITO REALMENTE longos tutoriais porque realmente é tão simples :)
fonte
O Putty tem uma
-pw
opção que permite criar um atalho na área de trabalho como este:fonte
ssh-keygen
. (Se indicar que você precisa especificar um tipo, façassh-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 arquivossh-keygen
, embora você precise ter uma instalação muito antigassh
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 aid_rsa.pub
do outro host) neste arquivo.fonte
Se você quiser fazer tudo no terminal no Linux:
No host
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.
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
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.
fonte