Cache a senha se as chaves SSH forem proibidas

44

Eu tenho um servidor que eu tenho que acessar freqüentemente via ssh, porque eu crio nele. Agora, o centro de computação proíbe explicitamente chaves SSH porque elas são "inseguras". Eles acham que digitar minha senha, em um teclado, toda vez que possível, na frente de outros humanos, é uma maneira muito mais segura de fazer o login.

Agora; Eu não posso mudar suas mentes (eu tentei).

Existe uma maneira de, pelo menos, armazenar temporariamente senhas SSH, a maneira como o GIT pode armazenar senhas em um cache por um tempo definido?

    
por user2667180 01.10.2018 / 13:56

4 respostas

61

Reutilização da conexão

O SSHv2 permite que a mesma conexão autenticada estabeleça vários 'canais' - shell interativo, comando em lote, SFTP, juntamente com os secundários, como encaminhamento de agente ou encaminhamento de TCP. Seu servidor provavelmente suporta multiplexação de conexão por padrão. (Se seus administradores reclamarem, ele não está armazenando sua senha em cache em nenhum lugar - está armazenando toda a conexão em cache.)

Com o OpenSSH você tem ControlMaster e ControlPath opções (-M e -S) para fazer uso disso:

  1. Inicie uma conexão SSH 'principal' usando -M . (Já que você ainda não tem um ControlPath na sua configuração, você precisa especificá-lo na linha de comando usando -S . Ele precisa ser longo, então eu adiciono as opções -fN para o fundo; elas são tecnicamente opcional de outra forma.)

    $ ssh [email protected] -fNMS ~/.ssh/bar.socket
    [email protected]'s password:
    

    Você está de volta ao shell local.

  2. Inicie uma nova conexão pelo mestre:

    $ ssh [email protected] -S ~/.ssh/bar.socket
    

    Você está dentro.

  3. Para que isso seja útil para o Git / rsync / SFTP, você precisa configurar ControlPath em sua configuração, porque você não poderá especificar -S o tempo todo:

    Host *
        ControlPath ~/.ssh/S.%r@%h:%p
    

Você pode automatizar isso - versões recentes do OpenSSH também possuem ControlPersist , que estabelece automaticamente uma conexão mestre em background, se ainda não houver uma. Isso permite que você pule a etapa 1 e use apenas ssh como faria normalmente.

  1. Configuração em ~/.ssh/config :

    Host *
        ControlPath ~/.ssh/S.%r@%h:%p
        ControlMaster auto
        ControlPersist 15m
    
  2. Primeira conexão pede senha:

    $ ssh [email protected]
    [email protected]'s password:
    [foo@bar:~]$ exit
    
  3. O segundo não:

    $ ssh [email protected]
    [foo@bar:~]$ yay
    

Para controlar o mestre multiplex (pare ou configure os reencaminhamentos TCP), use a opção -O .

Um método semelhante é suportado pelas versões recentes do PuTTY .

    
por 01.10.2018 / 14:31
19

Use sshpass

sshpass ( github , man page ) é uma ferramenta que alimenta automaticamente a senha para o ssh. A maneira segura de usá-lo é esta:

% echo 'correct horse battery staple' > ~/.ssh/compute_password
% chmod go-rw ~/.ssh/compute_password

% sshpass -f ~/.ssh/compute_password ssh foo@host

Isso lerá a senha de ~/.ssh/compute_password , muito parecida com um arquivo de chave privada sem passphrase. Você poderia colocar o comando sshpass em um script de shell pequeno ou em um alias de shell para evitar digitar esse comando completo. Infelizmente, não encontrei uma maneira de fazer isso em ~/.ssh/config .

(Também é possível especificar a senha diretamente na linha de comando para sshpass , mas isso deve ser evitado, pois a senha é perdida para qualquer pessoa que possa fazer ps )

Comparação com outros métodos

Essa abordagem é, naturalmente, menos segura do que configurar corretamente a autenticação de chave pública, mas você provavelmente já sabe disso.

Também é menos seguro do que a resposta de @gewwity sobre reutilização de conexão, mas tem a vantagem de não precisar inserir a senha interativamente.

Você pode considerar a resposta do @gravity como uma alternativa à auth do pubkey com uma senha e um cache de chave privada (por exemplo, ssh-agent ). Então, minha resposta seria uma alternativa à autenticação do pubkey sem uma frase secreta no arquivo de chave privada.

    
por 01.10.2018 / 18:06
1

Use o gerenciador de senhas.

Alguns gerenciadores de senhas (ex. KeePassXC) possuem o recurso 'auto-type'. Você armazena a senha no gerenciador de senhas, desbloqueia o banco de dados quando executa o gerenciador e sempre que ssh solicitar sua senha, você pressiona uma combinação de teclas que faz com que o gerenciador de senhas grave sua senha longa no console.

Não é necessário copiar, lembrar de nada (exceto a senha para desbloquear o banco de dados) e você pode ter uma senha strong sem mesclar esses 30 caracteres toda vez que tentar fazer login.

Você pode escolher seu favorito nesta lista: link

    
por 02.10.2018 / 12:08
0

Outra alternativa é usar um cliente ssh da GUI. No Windows, a escolha óbvia seria PuTTY . Há também uma versão Linux do PuTTY, notavelmente a maioria das distribuições baseadas no Debian como o Ubuntu normalmente incluem o PuTTY em seu repositório.

Outro cliente realmente bom é o Termius . Suporta não apenas o Windows e o Linux, mas também o OSX, o iOS e o Android. Embora tenha sido projetada principalmente para telefones, a versão desktop é realmente muito boa.

Se não estou enganado, o venerável Hyperterminal no Windows também tem / tinha um cliente ssh integrado, mas eu não uso janelas há muito tempo, então não tenho certeza.

Todos os clientes GUI incluem a capacidade de salvar as configurações de conexão, incluindo seu nome de usuário e senha.

    
por 03.10.2018 / 05:42

Tags