Posso usar uma chave SSH com uma senha vazia?

34

Quando aprendi a criar chaves ssh, todos os tutoriais que li afirmavam que uma boa senha deve ser escolhida. Mas, recentemente, ao configurar um processo daemon que precisa ssh para outra máquina, descobri que a única maneira (ao que parece) de ter uma chave que não preciso autenticar a cada inicialização é criar uma chave com um vazio senha. Então, minha pergunta é: quais são as preocupações com o uso de uma chave sem senha?

mozillalives
fonte

Respostas:

38

Uma chave sem frase secreta depende de que ninguém mais possa acessá-la (que não seria capaz de acessar os recursos aos quais dá acesso). Portanto, se a chave conceder acesso a uma máquina próxima a ela e ambas as máquinas tiverem o mesmo nível de segurança eletrônica e física, não será realmente um grande problema.

Por outro lado, se sua chave estiver em uma máquina com pouca segurança (talvez ela tenha muitos usuários não confiáveis, seja facilmente acessível fisicamente ou não seja mantida atualizada com seu regime de correção), você provavelmente não não quero manter as chaves sem frase-senha lá.

Por fim, depende da confiança em sua configuração e do peso dos riscos / custos de fazê-lo - se você puder ter certeza de que não é realmente mais fácil para um invasor obter acesso à chave do que ao recurso ao qual a chave lhe dá acesso. , então você está bem. Se você não tem essa confiança, provavelmente deve corrigir os motivos pelos quais :)

Mo.
fonte
Somente pessoas de confiança terão acesso à máquina com as chaves, então acho que isso responde à minha pergunta. Obrigado.
mozillalives
11

outra solução, aprimorando a segurança e facilitando para você, para que você não precise digitar sua senha o tempo todo:

se você quiser criptografar sua chave privada, poderá usar ssh-agentem sua estação de trabalho para 'armazenar em cache' a chave não criptografada. quando você deseja armazenar sua chave descriptografada, executa ssh-add ~/.ssh/id_rsaou qualquer que seja o nome da sua chave privada. você será solicitado a fornecer a senha e a chave descriptografada estará disponível para suas conexões ssh até que você efetue logout, ssh-agentinterrupção ou desligamento.

você pode usar killas chaves armazenadas ssh-agent -ke pode atribuir uma vida útil para a chave estar na memória com ssh-agent -t [seconds]isso, por exemplo; se você não deseja manter sua chave descriptografada para sempre, mas deseja fazer uma grande quantidade de sessões em torno de seus hosts, pode definir o tempo limite para 5 a 10 minutos. para que você não precise inserir continuamente a senha da sua chave.

novamente, tudo isso tem a ver com a confiança que você tem com a segurança de sua / estação de trabalho /, que, se você é o único que tem acesso a ela, e possui uma senha local bastante segura, e você não convide explorações e rootkits, a sua chave privada sem senha é razoavelmente segura.

se você é como eu e mantém sua chave privada em um pendrive, você definitivamente vai querer criptografar isso, mesmo que seja apenas uma chave privada (uma chave separada da qual eu uso na minha estação de trabalho, por isso, se eu perco minha chave, posso facilmente remover a chave pública do pen-drive da ~/.ssh/authorized_keyslista do meu servidor , o que também traz um / excelente / motivo para adicionar comentários ÚTEIS às suas chaves públicas)

na sua resposta a uma resposta anterior, você disse que apenas as pessoas em quem você confia têm acesso à máquina com as chaves. Eu só quero esclarecer que sua chave privada NÃO precisa estar no servidor ao qual você está se conectando, caso seja o que você está fazendo. apenas sua chave pública precisa estar no servidor, e isso não é problema, e é por isso que é uma chave 'pública'.

esqueci de mencionar; i lançar ssh-agentquando eu começar a X, caso contrário, as chaves de-crypted i loja com ssh-addnão são mantidas através de diferentes xtermsessões, e eu tenho que re-digitar a senha cada vez que eu fechar o xtermi lançado ssh-addno em minha. ~/.xinitrcarquivo, eu tenho:

if [ -x /usr/bin/ssh-agent ]; then
   eval $(/usr/bin/ssh-agent)
fi

Eu tenho a chamada para ssh-agentencerrar evalporque ssh-agent retorna algumas variáveis ​​de ambiente que precisam ser definidas quando são executadas e executadas a partir de ~/.xinitrc, as variáveis ​​de ambiente são constantes durante toda a sessão X.

cpbills
fonte
Sim - eu sei que só preciso fazer upload da chave pública. É que estou conectando um servidor a outro, e foi por isso que mencionei isso. Mas obrigado por escrever esta resposta clara e ponderada.
mozillalives
bem, se você usá ssh-agent- ssh -A -i privkey user@hostlo, ele permitirá o encaminhamento do agente ssh, o que permitiria acessar um servidor a partir do servidor inicial, sem colocar sua chave privada no primeiro servidor. O encadeamento ssh não é recomendado, mesmo sem o encaminhamento de chave ssh ativado e ssh -Apossui suas próprias preocupações de segurança. não há motivo para que a chave no servidor não possa ser criptografada, enquanto a chave na estação de trabalho é sem senha.
Cpbills
3

Você pode dar uma olhada em uma pergunta semelhante que eu fiz sobre chaves privadas SSL para servidores da web. Basicamente, existem três opções:

  1. Proteja a chave com permissões do sistema de arquivos.
  2. Use uma chave protegida por senha e insira a chave manualmente em todas as reinicializações.
  3. Use uma chave protegida por senha e armazene a chave no sistema de arquivos para automatizar a reinicialização.

Cada um deles é falho, então tudo depende do que você mais teme.

chmeee
fonte
1

Para acesso automatizado, que, como você diz, exige chaves sem senha, sempre utilizo as opções extras de allowed_keys (consulte sshd (8)) para limitar o comando que pode ser executado.

Normalmente, forneço um script cuidadosamente escrito no final remoto, que executa exatamente o trabalho (ou trabalhos - ele pode ver os parâmetros) que eu quero que seja permitido.

Em seguida, eu também a tranco nos endereços IP que podem se conectar com essa chave (não 100% infalível, mas também com a restrição de comando).

jrg
fonte
Ponto excelente - se você achar necessário usar chaves desprotegidas, a melhor coisa a fazer é bloqueá-lo!
MikeyB
1

Desde que ninguém além de você tenha acesso à chave, você não precisará de uma senha. De fato, você não pode usar uma senha em chaves usadas por software automatizado.

Fahad Sadah
fonte
0

Se você deseja usar o ssh para executar qualquer tipo de procedimento automatizado - estou pensando especificamente nas verificações do Nagios -, provavelmente você não gostaria de usar uma senha.

Nessa situação, você provavelmente não usaria isso fora de uma LAN e teria a chave armazenada com segurança no servidor executando o procedimento.

A maioria dos tutoriais que discutem o SSH antecipa uma pessoa que efetua login em uma rede externa, possivelmente em um computador não seguro. Nesse caso, o conselho é bom.

Basicamente, a menos que você saiba que existe um bom motivo para não criar, crie uma senha. Ser muito preguiçoso para digitar sua senha toda vez pode ser uma razão suficientemente boa para você :-)

dunxd
fonte
Mesmo se eles se conectam a partir de uma rede externa, como isso faz diferença? Apenas a segurança do computador cliente é importante, a senha é manipulada no lado do cliente, certo?
precisa saber é
Até que o laptop do cliente seja roubado e usado para violar seu perímetro antes que alguém tenha a chance de revogar a chave SSH. Uma senha na chave daria mais tempo para revogar as chaves.
Dunxd
Então, como eu disse, "apenas a segurança do computador cliente é importante".
njsg