zoukankan      html  css  js  c++  java
  • 创建交互式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) 
  • 相关阅读:
    1856: [Scoi2010]字符串(Catalan数)
    11.6NOIP模拟赛
    bzoj1257[CQOI2007]余数之和(除法分块)
    11.5NOIP模拟赛
    bzoj1048(记忆化搜索)
    置顶公告+更新日志
    CF585F Digits of Number Pi
    [SHOI2007]善意的投票
    [HEOI2015]最短不公共子串
    树形背包复杂度+P3177 [HAOI2015]树上染色
  • 原文地址:https://www.cnblogs.com/superbaby11/p/15591613.html
Copyright © 2011-2022 走看看