首页 > 解决方案 > 如何解析提示?

问题描述

我制作了一个 python 脚本来连接到 SSH 服务器:

import paramiko
from paramiko import SSHClient

product.sshClient = SSHClient()
product.sshClient.load_system_host_keys()
product.sshClient.set_missing_host_key_policy(paramiko.AutoAddPolicy())
try:
    product.sshClient.connect(product.ip, port=22, username=login, password=password, look_for_keys=False, allow_agent=False, timeout=5000)
    product.sshConnection = product.sshClient.invoke_shell()
except:
    product.sshClient.close()
    product.sshConnection = None
    product.sshClient = None
    print("      SSH can't connect '" + login + "'@" + product.ip + "...")
    return False

if ssh_waitPrompt(5) == False:
    print("      SSH timeout prompt '" + login + "'@" + product.ip + "...")
    product.sshClient.close()
    product.sshConnection = None
    product.sshClient = None
    return False

问题是我不知道如何创建 ssh_waitPrompt(timeout) 函数,因为提示格式是“\x1b[1m\x1b[0mMY_PROMPT_NAME\x1b[0m\x1b[1m:/#\x1b[0m””...我有问题用“\x??” 字节

def ssh_waitPrompt(timeout):
    bufsize = 65535
    output = b""

    start = datetime.datetime.now()
    start_secs = time.mktime(start.timetuple())
    while True:
        # Timeout check
        now = datetime.datetime.now()
        now_secs = time.mktime(now.timetuple())
        et_secs = now_secs - start_secs
        if et_secs > timeout:
            return False

        if product.sshConnection.exit_status_ready():
            return False

        if product.sshConnection.recv_ready():
            buf = product.sshConnection.recv(bufsize) #.decode('ascii')
            #print(buf)
            output = output + buf

        vals = output.split(b"\x1b[0m\x1b[1m:/#\x1b[0m ", 1)
        if len(vals) > 1:
            vals2 = vals[0].split(b"\n")
            print(b"      SSH prompt : '" + vals2[len(vals2) - 1] + b"'")

            output = vals[1]
            break

        time.sleep(0.200)

    buf = product.sshConnection.recv(bufsize) #.decode('ascii')
    #print(buf)
    output = output + buf
    return True

我能怎么做 ?

PS:我需要将我的 scrypt 运行到交互式 shell 模式

标签: pythonssh

解决方案


推荐阅读