paramiko创建可交互的ssh会话

paramiko创建可交互的ssh会话

python使用paramiko的SSHClient创建的ssh会话可以轻松的执行shell命令并获取结果,但是也存在一些不足,我想要执行history命令,却发现得不到预期的history的输出,然后我了解到可以使用SSHClient的invoke_shell()函数获取一个可交互的会话,通过简单的包装,可以实现一个使用可交互式会话执行shell命令并获取执行结果的函数

import time
import paramiko

def invoke_shell_exec(cmd) :
    hostname = '192.168.1.1'
    username = 'root'
    ssh = paramiko.SSHClient()
    ssh.load_system_host_keys()
    ssh.connect(hostname=hostname, username=username)
    channel = ssh.invoke_shell() #获取可交互式会话
    channel.settimeout(10)  #设置超时抛出异常
    buff = ''
    msg = ''
    #会话连接后先获取一下远程服务器返回的登录信息
    while not (buff.endswith('# ') or buff.endswith('$ ')) :
        resp = channel.recv(1024)
        buff += resp.decode()
    msg += buff
    #获取完登录信息后再发送shell命令
    while True :
        if channel.send_ready() :
            channel.send(cmd.encode())
            break
        time.sleep(0.1)
    #再获取一下shell命令的执行结果
    buff = ''
    while not (buff.endswith('# ') or buff.endswith('$ ')) :
        resp = channel.recv(1024)
        buff += resp.decode()
    msg += buff
    channel.close()
    result = msg.split('\n')
    return result
posted @ 2024-06-12 14:14  realzhangsan  阅读(16)  评论(0编辑  收藏  举报