Автоматический ввод пароля SSH без использования SSH Key, 'expect', 'sshpass' или Python

Если вы хотите добавить заголовок, вы можете использовать параметр - заголовок :

wget --header="If-Modified-Since: …" http://example.com/

Но для конкретного случая в вопросе лучше сделать как другой ответ здесь предполагает: просто используйте параметр -N .

1
14.04.2016, 04:20
1 ответ

Эй, спасибо за совет! Мне нужно сделать цикл для отправки команд на разные устройства, и я настраиваю ваш код:

#!/usr/bin/python
# simplest builtin python pseudo-tty for ssh password. meuh 
# http://unix.stackexchange.com/a/276385/119298

import os
import subprocess
import getpass

addresses = open('IP_addresses.txt', 'r')
lines = addresses.readlines()

update_log = open('Update_Log.txt', 'w')
update_log.close()

password = getpass.getpass(prompt='Password: ', stream=None)

def ssh_connect():
        global count
        count = 0

        for line in lines:
                count += 1
                print line.strip()
                x = line.strip()
                x = x.split(',')

                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,password)
                                        os.write(fd,"\n")
                                elif data.endswith("#"):  # bash prompt for input
                                        os.write(fd,"terminal l 0\n")
                                        os.write(fd,"show version\n")
                                        os.write(fd,"exit\n")
                                        if "closed." in data:  # connection closed for input
                                                break
                run("ssh", "ssh", '%s@%s' %(x[0], x[1]))

                if not line:
                        break
                print("Line{}: {}".format(count, line.strip()))

addresses.close()
print ssh_connect()

Это не работает, как я хотел, потому что моя команда "Выход" блокирует цикл. Я продолжу искать решение.

0
23.11.2021, 07:58

Теги

Похожие вопросы