async with#

До сих пор подключение выполнялось не в менеджере контекста. Модуль asynssh может выполнять подключение в менеджере контекста, но не в обычном блоке with, а в async with. Для асинхронного менеджера контекста созданы отдельные специальные методы __aenter__, __aexit__, которые равнозначны синхронным вариантам по смыслу, но при этом являются сопрограммами.

Пример подключения с помощью асинхронного менеджера контекста:

async def send_show(host, username, password, enable_password, command):
    print(f"Подключение к {host}")
    async with asyncssh.connect(
        host=host,
        username=username,
        password=password,
        encryption_algs="+aes128-cbc,aes256-cbc",
    ) as ssh:
        writer, reader, stderr = await ssh.open_session(
            term_type="Dumb", term_size=(200, 24)
        )
        await read_until(reader, ">")
        writer.write("enable\n")
        await read_until(reader, "Password")
        writer.write(f"{enable_password}\n")
        await read_until(reader, [">", "#"])
        writer.write("terminal length 0\n")
        await read_until(reader, "#")

        print(f"Отправка команды {command} на {host}")
        writer.write(f"{command}\n")
        output = await read_until(reader, "#")
        return output