Sou relativamente novo no Linux. Usando o Ubuntu no WSL2. Eu adicionei uma chave privada para o github sem senha usando ssh-add
. Usei-o algumas vezes durante a sessão, mas no dia seguinte não consegui me conectar. Quando eu listo todas as chaves usando ssh-add -l
não há nenhuma.
Devo adicionar a chave para cada sessão ou criar uma automação para ela? Ou esse é um comportamento normal (falta de) persistência com o WSL?
O OpenSSH padrão de
ssh-agent
fato não tem persistência. O problema é que ele não tem onde armazenar com segurança as chaves descriptografadas. (Se os armazenasse em disco, isso não seria melhor do que os arquivos de chave que você já possui.)Apenas o serviço ssh-agent "OpenSSH for Windows" no Windows 10 possui persistência integrada, mas esse é um recurso personalizado adicionado pela Microsoft e funciona porque o Windows possui um recurso genérico de proteção de dados no nível do sistema operacional - as chaves SSH permanecem criptografadas com sua senha de login – que não é universal no mundo Linux/BSD.
(E da mesma forma, a versão completa do Ubuntu (com interface gráfica) substitui o ssh-agent pelo GNOME Keyring, que é um serviço de armazenamento de senhas (semelhante ao "Gerenciador de credenciais" no Windows) e carrega automaticamente suas chaves SSH usando a senha armazenada no Chaveiro. Isso provavelmente não funcionará no WSL2.)
Então, sim, você deve iniciar o ssh-agent e carregar chaves nele toda vez que o computador for iniciado. Por exemplo, você pode ajustar seu ~/.profile no WSL-Ubuntu para carregar chaves automaticamente (você ainda receberá um prompt de senha, só não precisará executar ssh-add) – existem vários posts sobre como fazer isso.
O GnuPG gpg-agent pode ser configurado para emular um ssh-agent, mas com persistência - embora ainda dependa de outra coisa para lembrar a senha nas reinicializações (como o já mencionado GNOME Keyring), portanto, dentro do WSL, ele apenas economizará a necessidade para correr
ssh-add
no máximo.Existem alguns projetos no GitHub que conectam todas as solicitações de assinatura a um agente SSH que é executado fora do WSL, por exemplo, o 'ssh' do Linux pensa que está falando com um agente ssh do Linux, mas na verdade está falando com o agente ssh do Windows ou até mesmo para o concurso de PuTTY.
Acredito que o OP só queria poder
ssh
acessar sua instância WSL2 com chave pública, ou seja, não precisar digitar a senha do usuário ao se conectar.Isso é possível usando o
C:\ProgramData\ssh
diretório (assumindo o usuário administrativo) no sistema de arquivos do Windows (em vez de ~/.ssh como normalmente faria em, digamos, Ubuntu).As instruções estão descritas aqui:
https://docs.microsoft.com/en-us/windows-server/administration/openssh/openssh_keymanagement
(Isso pressupõe que você tenha o Open-SSH instalado e em execução com o WSL2)
As etapas são ligeiramente diferentes para contas de usuário administrativas e "normais".
É essencialmente o mesmo que configurar o arquivo authorized_keys no Ubuntu, mas está no Windows FS e tem "administrative_" anexado ao nome do arquivo.
* Nota: o diretório e o nome do arquivo são diferentes para usuários "normais".