学习内容:

1、html简介

2、html标签

3、堡垒机

一、html简介

HTML是英文Hyper Text Mark-up Language(超文本标记语言)的缩写,他是一种制作万维网页面标准语言(标记)。相当于定义统一的一套规则,大家都来遵守他,这样就可以让浏览器根据标记语言的规则去解释它。

基本样式:

html+头部+身体

  1. <!DOCTYPE html>
    <html lang="en">
    <head>
    <meta charset="UTF-8">
    <title>Title</title>
    </head>
    <body>
  2.  
  3. </body>
    </html>

二、html标签

  1. div
    span
    a
    p
    <br/>
    h1 ~ h6
    input系列:
    type='text' value='默认值'
    type='password'
    type='radio' name='互斥' value='1' checked='checked'
    type='checkbox' name='x' value='1' checked='checked'
    type='file' => Form中加入属性 enctype="multipart/form-data" POST
    type='botton' value='按钮上的文字'
    type='submit' value='提交当前Form表单'
    type='reset' value='重置当前Form表单'
    select name='city' muiltiple size='10'
    option value='x'
    textarea
    ul
    li
    ol
    li
    dl
    dt
    dd
    img
    table
    thead
    tr,th
    tbody
    tr,td
    # 合并单元格 rowspan colspan
    fieldset
    legend

二、堡垒机

  1. #!/usr/bin/env python
    # -*- coding:utf-8 -*-
    import paramiko
    import sys
    import os
    import socket
    import getpass
    import termios
    import tty
    import select
    from paramiko.py3compat import u
  2.  
  3. def interactive_shell(chan):
    # 获取原tty属性
    oldtty = termios.tcgetattr(sys.stdin)
    try:
    # 为tty设置新属性
    # 默认当前tty设备属性:
    # 输入一行回车,执行
    # CTRL+C 进程退出,遇到特殊字符,特殊处理。
  4.  
  5. # 这是为原始模式,不认识所有特殊符号
    # 放置特殊字符应用在当前终端,如此设置,将所有的用户输入均发送到远程服务器
    tty.setraw(sys.stdin.fileno())
    tty.setcbreak(sys.stdin.fileno())
    chan.settimeout(0.0)
  6.  
  7. log = open('handle.log', 'a+', encoding='utf-8')
    flag = False
    temp_list = []
  8.  
  9. while True:
    r, w, e = select.select([chan, sys.stdin], [], [])
    if chan in r:
    try:
    x = u(chan.recv(1024))
    if len(x) == 0:
    sys.stdout.write('\r\n*** EOF\r\n')
    break
    # 如果用户上一次点击的是tab键,则获取返回的内容写入在记录中
    if flag:
    if x.startswith('\r\n'):
    pass
    else:
    temp_list.append(x)
    flag = False
    sys.stdout.write(x)
    sys.stdout.flush()
    except socket.timeout:
    pass
    if sys.stdin in r:
    # 读取用户在终端数据每一个字符
    x = sys.stdin.read(1)
    if len(x) == 0:
    break
    # 如果用户点击TAB键
    if x == '\t':
    flag = True
    else:
    # 未点击TAB键,则将每个操作字符记录添加到列表中,以便之后写入文件
    temp_list.append(x)
  10.  
  11. # 如果用户敲回车,则将操作记录写入文件
    if x == '\r':
    log.write(''.join(temp_list))
    log.flush()
    temp_list.clear()
    chan.send(x)
  12.  
  13. finally:
    # 重新设置终端属性
    termios.tcsetattr(sys.stdin, termios.TCSADRAIN, oldtty)
  14.  
  15. def run():
    db_dict = {
    'c1.salt.com': {
    'root': {'user': 'root', 'auth': 'r', "cert": 'key路径'},
    'alex': {'user': 'alex', 'auth': 'p', "cert": '密码'},
    },
    'c2.salt.com': {
    'root': {'user': 'root', 'auth': 'r', "cert": 'key路径'},
    'alex': {'user': 'alex', 'auth': 'p', "cert": '密码'},
    },
  16.  
  17. }
  18.  
  19. for row in db_dict.keys():
    print(row)
  20.  
  21. hostname = input('请选择主机: ')
    tran = paramiko.Transport((hostname, 22,))
    tran.start_client()
  22.  
  23. for item in db_dict[hostname].keys():
    print(item)
  24.  
  25. username = input('请输入用户: ')
  26.  
  27. user_dict = db_dict[hostname][username]
    if username['auth'] == 'r':
    key = paramiko.RSAKey.from_private_key_file(user_dict['cert'])
    tran.auth_publickey(username, key)
    else:
    pw = user_dict['cert']
    tran.auth_password(username, pw)
  28.  
  29. # 打开一个通道
    chan = tran.open_session()
    # 获取一个终端
    chan.get_pty()
    # 激活器
    chan.invoke_shell()
  30.  
  31. interactive_shell(chan)
  32.  
  33. chan.close()
    tran.close()
  34.  
  35. if __name__ == '__main__':
    run()
  36.  
  37. #提示用户选择主机和用户(记录操作日志)

PYTHON进阶(4)的更多相关文章

  1. Python进阶:函数式编程实例(附代码)

    Python进阶:函数式编程实例(附代码) 上篇文章"几个小例子告诉你, 一行Python代码能干哪些事 -- 知乎专栏"中用到了一些列表解析.生成器.map.filter.lam ...

  2. Python进阶 - 对象,名字以及绑定

    Python进阶 - 对象,名字以及绑定 1.一切皆对象 Python哲学: Python中一切皆对象 1.1 数据模型-对象,值以及类型 对象是Python对数据的抽象.Python程序中所有的数据 ...

  3. Python进阶-继承中的MRO与super

    Python进阶-继承中的MRO与super 写在前面 如非特别说明,下文均基于Python3 摘要 本文讲述Python继承关系中如何通过super()调用"父类"方法,supe ...

  4. Python进阶 - 命名空间与作用域

    Python进阶 - 命名空间与作用域 写在前面 如非特别说明,下文均基于Python3 命名空间与作用于跟名字的绑定相关性很大,可以结合另一篇介绍Python名字.对象及其绑定的文章. 1. 命名空 ...

  5. python进阶学习笔记(一)

    python进阶部分要学习的内容: 学习目标: 1.函数式编程 1.1,什么是函数式编程 函数式编程是一种抽象计算的编程模式 不同语言的抽象层次不同: 函数式编程的特点: python支持的函数式编程 ...

  6. 【python进阶】详解元类及其应用2

    前言 在上一篇文章[python进阶]详解元类及其应用1中,我们提到了关于元类的一些前置知识,介绍了类对象,动态创建类,使用type创建类,这一节我们将继续接着上文来讲~~~ 5.使⽤type创建带有 ...

  7. 【python进阶】Garbage collection垃圾回收2

    前言 在上一篇文章[python进阶]Garbage collection垃圾回收1,我们讲述了Garbage collection(GC垃圾回收),画说Ruby与Python垃圾回收,Python中 ...

  8. Python进阶 函数式编程和面向对象编程等

    函数式编程 函数:function 函数式:functional,一种编程范式.函数式编程是一种抽象计算机的编程模式. 函数!= 函数式(如计算!=计算机) 如下是不同语言的抽象 层次不同 高阶函数: ...

  9. 【python进阶】深入理解系统进程2

    前言 在上一篇[python进阶]深入理解系统进程1中,我们讲述了多任务的一些概念,多进程的创建,fork等一些问题,这一节我们继续接着讲述系统进程的一些方法及注意点 multiprocessing ...

  10. Python进阶:如何将字符串常量转化为变量?

    前几天,我们Python猫交流学习群 里的 M 同学提了个问题.这个问题挺有意思,经初次讨论,我们认为它无解. 然而,我认为它很有价值,应该继续思考怎么解决,所以就在私密的知识星球上记录了下来. 万万 ...

随机推荐

  1. springboot项目js文件404

    如果检查路径没有问题,其他的js都可以引入,只有新改动的js报404的话,可以尝试重启IDE,并清除缓存.

  2. mysql与cmd,中文乱码

    图中第一次select, 通过navicat插入表中的, 下面的这次select结果,是直接在命令行中插入的,中文就显示了两个问号...搞不懂咋回事..我是win10家庭版系统.....希望各位道友谨 ...

  3. Spring常用注解总结(2)

    @Autowired "自动填装",作用是为了消除代码JAVA代码里面的getter/setter与bean属性中的property. @Autowired默认按类型匹配的方式,在 ...

  4. Ireport启动错误

    问题描述:cannot find java.exe Neither (null)\jre\bin\java.exe nor (null)\bin\java.exe exits 解决办法: 打开Irep ...

  5. 手工脱壳之FSG压缩壳-IAT表修复

    目录 一.工具及壳介绍 二.脱壳 2.1.单步跟踪脱壳 2.2.IAT修复 三.程序脱壳后运行截图 四.个人总结 五.附件 一.工具及壳介绍 使用工具:Ollydbg.PEID.ImportREC.L ...

  6. 使用Jmeter连接数据库检查数据库记录的方法

    一.首先下载Jdbc驱动(jdbc驱动分两种,classes与ojdbc文件,该用哪个需要检查电脑安装的jdk版本(查看方法cmd命令java –version) 关于各种版本的说明:http://e ...

  7. JavaSE基础知识(5)—面向对象(抽象类和接口)

    一.抽象类 1.理解 用abstract关键字定义的类,称为抽象类用abstract关键字定义的方法,称为抽象方法意义:当设计父类时,发现该父类根本不需要创建对象,并且里面有不好描述的方法.这个时候往 ...

  8. Falsk SqlAlchemy

    pip install mysql-connector from flask import Flask from flask_sqlalchemy import SQLAlchemy app = Fl ...

  9. 11.Redis缓存设计

    11.Redis缓存设计11.1 缓存的收益和成本11.2 缓存更新策略11.3 缓存粒度控制11.4 穿透优化11.5 无底洞优化11.6 雪崩优化11.7 热点key重建优化11.8 本章重点回顾

  10. angular2监听页面大小变化

    一.现象 全屏页面中的图表,在很多的时候需要 resize 一把,以适应页面的大小变化 二.解决 1.引入 : import { Observable } from 'rxjs'; 2.使用(在ngO ...