Insira automaticamente a senha SSH sem usar a chave SSH, 'expect', 'sshpass' ou Python

1

Eu tenho um pequeno dispositivo que inicializa uma minúscula VM do PowerPC Linux, da qual eu preciso para o SSH, a partir de um script em uma pequena versão do Yocto linux. As senhas PowerHash SSH permanecem as mesmas, mas redefine a maioria de seus arquivos principais, incluindo a regeneração de suas chaves ssh, cada reinicialização.

A instalação do Yocto linux não tem o comando 'expect', nem pode instalar 'sshpass'. Tem uma versão extremamente limitada do Python.

Gostaria de poder completar o requisito de senha a partir de um prompt básico 'ssh' usando apenas um script de shell. Isso é possível?

    
por Julian Villalva 14.04.2016 / 02:15

1 resposta

2

Supondo que você queira um script que envie uma senha para o controle remoto ao efetuar login via ssh, aqui está um código python muito pequeno que não deve precisar de nenhuma biblioteca extra e assim por diante. Obviamente, é apenas um exemplo do que é possível usando apenas o execp exec write OSl forkpty.

#!/usr/bin/python
# simplest builtin python pseudo-tty for ssh password. meuh 
# http://unix.stackexchange.com/a/276385/119298
import os
def run(cmd,*args):
    pid, fd = os.forkpty()
    if pid==0: # child
        os.execlp(cmd,*args)
    while True:
        data = os.read(fd,1024)
        print data
        if "password:" in data:    # ssh prompt
            os.write(fd,"mypassword\n")
        elif data.endswith("$ "):  # bash prompt for input
            os.write(fd,"echo hello\n")
            os.write(fd,"echo bye\n")
            os.write(fd,"exit\n")

run("ssh", "ssh", "user@remote")

Note que você precisa dar "ssh" duas vezes, uma vez para argv [0].

    
por 14.04.2016 / 09:54