Fazer minha chave SSH protegida por senha expirar ou atingir o tempo limite após um tempo

12

Eu tenho uma chave SSH privada que uso para autenticação armazenada em ~ / .ssh / id_rsa . Quando ssh em um servidor, é solicitada a senha para desbloquear a chave:

insira a descrição da imagem aqui

Eu gosto disso. Também gosto de poder ssh repetidamente e isso não me pede minha senha.

O que eu não gosto é que não sou obrigado a digitar minha senha de chave dias ou semanas depois. Posso bloquear minha tela ou colocá-la em repouso e ainda não preciso digitar minha senha de chave. A única vez que parece expirar a senha é quando eu saio (o que raramente faço).

Como faço para que a senha da chave expire depois de um tempo, forçando-me a digitar minha senha novamente para autenticar? Fazendo com que, talvez após 1 hora, a chave seja automaticamente esquecida.

Michael Kropat
fonte

Respostas:

4

Em vez de ajustar o ssh-agent (que agora exige grandes quantidades de hackers), recomendo simplesmente alterar as configurações do seu chaveiro padrão (de login). Eu uso o útil 'bloqueio durante o sono', bem como o 'bloqueio após 4 horas', porque não quero avisos a menos que esteja realmente afk.

Abra o Acesso ao chaveiro e clique com o botão direito do mouse no chaveiro de login para alterar as configurações: Configurações de segurança do chaveiro

Ou se você preferir uma linha de comando:

security set-keychain-settings -lu -t 14400

Isso resultará em pelo menos um prompt extra para desbloquear o próprio chaveiro (exigindo sua senha de login), bem como o prompt de qualquer chave que você estiver tentando usar ... mas é melhor do que desabilitar o System Integrity Protection IMO.

Dave Gregory
fonte
Esta não é uma opção no El Capitan para mim, e o comando da linha de comando não parece fazer nenhuma diferença, você sabe se existe alguma opção semelhante no El Capitan em algum lugar?
Ian
1
Tenho certeza de que consegui fazer isso no El Cap - acabei de verificar e os dois métodos (UI e cmdline) certamente ainda funcionam no Sierra. Só posso fazer isso no chaveiro de login, não no System ou no iCloud.
Dave Gregory
9

Nota : nas versões mais recentes do OS X, você deve desativar o System Integrity Protection para que esta resposta funcione. (Obrigado a @Dave Gregory e @Jaap por apontar isso.)

Abra /System/Library/LaunchAgents/com.openssh.ssh-agent.plist(em versões mais antigas :) org.openbsd.ssh-agent.plistem um editor de texto. Substituir:

<key>ProgramArguments</key>
<array>
    <string>/usr/bin/ssh-agent</string>
    <string>-l</string>
</array>

com:

<key>ProgramArguments</key>
<array>
    <string>/usr/bin/ssh-agent</string>
    <string>-l</string>
    <string>-t</string>
    <string>30m</string>
</array>

Isso expirará a chave após 30 minutos.

Reinicie. Espere, reinicie?!? Este não é o Windows! Sim, reinicie.

Bem, você pode tentar decifrar as instruções para alterar a configuração rapidamente , mas boa sorte.

Michael Kropat
fonte
1
Um pedante como eu substituiria o "1800" por "30m", pois facilita a leitura. Veja FORMATOS DE TEMPO em sshd_config (8) para o formato completo.
Tony Williams
@ Tony Williams legal! corrigido
Michael Kropat
Isso não parece estar funcionando para mim em Yosemite; alguém mais?
26815 Dave Gregory
Encontrei uma solução alternativa no Yosemite que não envolve desabilitar a Proteção de Integridade do Sistema; adicionado como resposta abaixo.
Dave Gregory
1
Obrigado pela informação @Jaap. Atualmente, não uso o OS-X diariamente, portanto não posso verificar nada pessoalmente, mas para tentar ser um bom administrador dessas perguntas e respostas, atualizei minha resposta com base nas suas informações e alterei a resposta aceita para Dave Gregory. porque desabilitar a proteção de integridade do sistema parece desaconselhável em muitos casos.
Michael Kropat
7

Você precisa definir a vida útil da chave. Normalmente, o padrão é para sempre.

Quando você executa, ssh-adddeseja usar a -topção Se você quer uma vida útil de uma hora, então é ssh-add -t 1h. Os formatos de hora podem ser vistos na sshd_configpágina de manual, mas, simplesmente, são um número seguido de s, m, h, d ou w por segundos, minutos, horas, dias ou semanas.

ssh-addpode ser colocado no seu arquivo .bashrc e solicitará apenas que você valide a chave uma vez. Mesmo quando a chave "expira", ela não é removida - ela apenas pede a senha novamente quando é feita uma tentativa de usá-la.

A outra opção seria alterar as opções de inicialização para as ssh-agentquais estão armazenadas /System/Library/LaunchAgents/org.openbsd.ssh-agent.pliste adicionar a opção -tlá. (Eu uso LaunchControlpara alterar isso, mas você pode fazer isso manualmente, se tiver cuidado.)

Tony Williams
fonte
Prefiro não ter que me lembrar de executar ssh-addmanualmente antes de executar o sshtempo todo. É interessante, mas estou realmente procurando por algo automático.
Michael Kropat
+1 obrigado por me apontar para a org.openbsd.ssh-agent.plistsolução
Michael Kropat
1

Uma outra solução é:

ssh-add -t <time> <ssh-private-key>  # Set maximum lifetime to your SSH priv key.
killall ssh-agent                    # Kill all ssh-agent processes.
ssh-add -D                           # Delete all identities recorded by the agent.

Com esta solução, você não precisa escolher um tempo limite para todas as suas chaves - bastante irritante quando deseja definir um tempo limite de alguns segundos para a gravação da senha da chave privada - e não precisa desativar o SIP para editar / Sistema / Biblioteca / LaunchAgents / org.openbsd.ssh-agent.plist.

symsymmas
fonte