Insira a senha no SSH sem digitar

5

No trabalho, acesso um sistema remoto via SSH e algumas interfaces da web que fazem login por meio do LDAP. Eu uso 1password para gerenciar minhas senhas, mas não consigo encontrar uma maneira simples de inserir a senha do gerenciador de senhas para o SSH. Eu vi sshpass , mas ele pode mostrar a senha em ps , o que é uma segurança muito ruim, e também não funciona no meu caso. Existe alguma maneira de inserir uma senha de um programa ou script externo por meio do SSH diretamente ou existem recursos no SSH que possam aproveitar e manter as senhas em sincronia? Como manter um arquivo de chave que eu desbloqueio para SSH que tenha a mesma senha, que é atualizada sempre que eu atualizo a senha. Note que não posso usar diretamente chaves para entrar no sistema porque não é construído para suportá-lo.

Editar: Um comentarista apontou que sshpass mostrará a senha em ps , que é um não-ir. Eu também não posso alias diretamente ssh para algo como sshpass ... ssh porque ainda faço logon em sistemas que usam chaves.

Editar 2: recebi a confirmação de que um gerenciador de senhas está correto e tentei usar sshpass com um descritor de arquivo para fazer login no servidor, mas parece que não funciona - em vez de me avisar insira meu token RSA, apenas não recebo nada, o que me faz pensar que ele não é executado no mesmo código e não aceita sshpass .

    
por josh 25.07.2016 / 06:08

4 respostas

0

Acabei indo por outra rota, devido a sshpass não trabalhar com a configuração do meu trabalho e não queria usar outro comando para fazer o login. Eu usei uma combinação de expect , o parâmetro de configuração ssh LocalCommand e um script Node para obter minha senha. Veja É possível sair do SSH no LocalCommand? também.

Essencialmente, minha solução é esta:

  1. Configurar um host ssh, por exemplo Host work com um HostName que aponta para minha máquina, por exemplo HostName localhost

  2. Adicione o PermitLocalCommand yes e o LocalComamnd <path to my expect script>; kill $PPID ao Host config

  3. Use o script de expectativa para:

    1. execute meu script do Node, que receberá minha senha e a salvará em uma variável

    2. Use essa senha salva durante a expectativa e, em seguida, interaja (veja abaixo)

  4. Quando a sessão SSH terminar, o LocalCommand executará o kill $PPID , o que me retornará à minha sessão de terminal original.

Aqui está o meu exemplo expect script:

set password [exec node <script>]
spawn -noecho ssh <work_host>
expect "Password"
send "${password}\n"
interact
    
por 11.08.2016 / 15:12
8

sshpass não precisa mostrar a senha no ps. Pode ler uma variável de ambiente:

SSHPASS=12345 sshpass -e ssh user@host

ou de um arquivo:

sshpass -f /path/to/password_file ssh user@host
    
por 25.07.2016 / 09:16
5

Meu sshpass tem uma opção -f para ler de um arquivo. Então, com a substituição do processo bash você pode fazer

sshpass -f <(myscript_call_1password) ssh host
    
por 25.07.2016 / 10:45
-3

Respondendo à pergunta original sobre automação e eliminação de pressionamentos de tecla:

I saw sshpass but it requires typing the sshpass command before running ssh, which is somewhat inconvenient.

Com base no seu comentário:

I have a script that communicates with the 1password database, so I'm looking to integrate the script and SSH.

Defina um alias (por exemplo no bash):

alias ssh='sshpass -p$(<your_script>) ssh'

E use-o como uma chamada ssh normal.

    
por 25.07.2016 / 06:30

Tags