创建交互式ssh类型shell

 

实现了类似xshell软件,进行ssh登录,然后输入命令看到结果的效果

 

 

 

# -*- coding:utf-8 -*-
import paramiko
import time
 
hostname = '192.168.10.40'
port = 22
username = 'root'
password = 'zx123456'
timeout = 10
 
 
def runCommand(chanT, command, endSymbol):
    chanT.send(command + '\n')  # 指令后加 '\n' 表示换行
    results = ''
    while True: 
        result = chanT.recv(1024).decode('utf-8')
        results += result
        if results[-2:] in endSymbol:  # 判断最后两个字符是否是我们定义的结束符
            break
    re = results.split('\n')[1:]  # 第一行是我们输入的指令,没用丢弃
    print('\n'.join(re), end='')
    return re[:-1]  # 最后一行是linux的SP1输入提示符,没用丢弃
 
 
if __name__ == "__main__":
    ssh = paramiko.SSHClient()
    ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
    ssh.connect(hostname, port, username, password)
    chan = ssh.invoke_shell()  # 创建一个交互式的shell窗口
    chan.settimeout(1000)
    time.sleep(3)  # 刚进入linux服务器等待一会,否则直接通过chan.recv获取的信息不完整
    loginInfo = chan.recv(1024).decode('utf-8')  # Welcome to Ubuntu 16.04.6 LTS..等登录信息
    print(loginInfo, end='')
    endSymbol = ['$ ', '> ', '* ','# ']  # 设置我们定义的结束符
    while True:
        command = input()  # 等待用户输入指令
        result = runCommand(chan, command, endSymbol) 

 

posted @ 2021-11-23 09:14  超级宝宝11  阅读(207)  评论(0编辑  收藏  举报