zoukankan      html  css  js  c++  java
  • Python之Paramiko、前端之html学习_Day14

    Paramiko

    paramiko模块,基于SSH用于连接远程服务器并执行相关操作。.

    远程连接服务器执行上传下载

     1 import paramiko
     2 class SSH:
     3     def __init__(self, host,port,user,pwd):
     4         self.host = host
     5         self.port = port
     6         self.user = user
     7         self.pwd = pwd
     8         self.transport = None
     9     def connect(self):
    10         self.transport = paramiko.Transport((self.host, self.port,))
    11         self.transport.connect(username=self.user, password=self.pwd)
    12 
    13     def cmd(self,cmd):
    14         ssh = paramiko.SSHClient()
    15         ssh._transport = self.transport
    16         stdin, stdout, stderr = ssh.exec_command(cmd)
    17         return stdout.read()
    18 
    19     def download(self,server_path,local_path):
    20         sftp = paramiko.SFTPClient.from_transport(self.transport)
    21         # 将location.py 上传至服务器 /tmp/test.py
    22         # sftp.put('/tmp/location.py', '/tmp/test.py')
    23         # 将remove_path 下载到本地 local_path
    24         sftp.get(server_path, local_path)
    25 
    26     def upload(self,server_path,local_path):
    27         sftp = paramiko.SFTPClient.from_transport(self.transport)
    28         # 将location.py 上传至服务器 /tmp/test.py
    29         # sftp.put('/tmp/location.py', '/tmp/test.py')
    30         # 将remove_path 下载到本地 local_path
    31         sftp.put(local_path, server_path)
    32 
    33 
    34     def close(self):
    35         self.transport.close()
    36 
    37 obj = SSH('192.168.100.1',22,'root','123')
    38 obj.connect()
    39 # v = obj.cmd('ls')
    40 v = obj.cmd('df -h')
    41 print(v)
    42 obj.close()
     1 import paramiko
     2 import uuid
     3 
     4 class SSHConnection(object):
     5 
     6     def __init__(self, host='192.168.11.61', port=22, username='alex',pwd='alex3714'):
     7         self.host = host
     8         self.port = port
     9         self.username = username
    10         self.pwd = pwd
    11         self.__k = None
    12 
    13     def run(self):
    14         self.connect()
    15         pass
    16         self.close()
    17 
    18     def connect(self):
    19         transport = paramiko.Transport((self.host,self.port))
    20         transport.connect(username=self.username,password=self.pwd)
    21         self.__transport = transport
    22 
    23     def close(self):
    24         self.__transport.close()
    25 
    26     def cmd(self, command):
    27         ssh = paramiko.SSHClient()
    28         ssh._transport = self.__transport
    29         # 执行命令
    30         stdin, stdout, stderr = ssh.exec_command(command)
    31         # 获取命令结果
    32         result = stdout.read()
    33         return result
    34 
    35     def upload(self,local_path, target_path):
    36         # 连接,上传
    37         sftp = paramiko.SFTPClient.from_transport(self.__transport)
    38         # 将location.py 上传至服务器 /tmp/test.py
    39         sftp.put(local_path, target_path)
    40 
    41 ssh = SSHConnection()
    42 ssh.connect()
    43 r1 = ssh.cmd('df')
    44 ssh.upload('s2.py', "/home/alex/s7.py")
    45 ssh.close()
    46 
    47 Demo
    View Code

    堡垒机流程

    1. 管理员为用户在服务器上创建账号(将公钥放置服务器,或者使用用户名密码)
    2. 用户登陆堡垒机,输入堡垒机用户名密码,现实当前用户管理的服务器列表
    3. 用户选择服务器,并自动登陆
    4. 执行操作并同时将用户操作记录

    完整版

      1 #!/usr/bin/env python
      2 # -*- coding:utf-8 -*-
      3 import paramiko
      4 import sys
      5 import os
      6 import socket
      7 import getpass
      8 import termios
      9 import tty
     10 import select
     11 from paramiko.py3compat import u
     12 
     13 
     14 def interactive_shell(chan):
     15     # 获取原tty属性
     16     oldtty = termios.tcgetattr(sys.stdin)
     17     try:
     18         # 为tty设置新属性
     19         # 默认当前tty设备属性:
     20         # 输入一行回车,执行
     21         # CTRL+C 进程退出,遇到特殊字符,特殊处理。
     22 
     23         # 这是为原始模式,不认识所有特殊符号
     24         # 放置特殊字符应用在当前终端,如此设置,将所有的用户输入均发送到远程服务器
     25         tty.setraw(sys.stdin.fileno())
     26         tty.setcbreak(sys.stdin.fileno())
     27         chan.settimeout(0.0)
     28 
     29         log = open('handle.log', 'a+', encoding='utf-8')
     30         flag = False
     31         temp_list = []
     32 
     33         while True:
     34             r, w, e = select.select([chan, sys.stdin], [], [])
     35             if chan in r:
     36                 try:
     37                     x = u(chan.recv(1024))
     38                     if len(x) == 0:
     39                         sys.stdout.write('
    *** EOF
    ')
     40                         break
     41                     # 如果用户上一次点击的是tab键,则获取返回的内容写入在记录中
     42                     if flag:
     43                         if x.startswith('
    '):
     44                             pass
     45                         else:
     46                             temp_list.append(x)
     47                         flag = False
     48                     sys.stdout.write(x)
     49                     sys.stdout.flush()
     50                 except socket.timeout:
     51                     pass
     52             if sys.stdin in r:
     53                 # 读取用户在终端数据每一个字符
     54                 x = sys.stdin.read(1)
     55                 if len(x) == 0:
     56                     break
     57                 # 如果用户点击TAB键
     58                 if x == '	':
     59                     flag = True
     60                 else:
     61                     # 未点击TAB键,则将每个操作字符记录添加到列表中,以便之后写入文件
     62                     temp_list.append(x)
     63 
     64                 # 如果用户敲回车,则将操作记录写入文件
     65                 if x == '
    ':
     66                     log.write(''.join(temp_list))
     67                     log.flush()
     68                     temp_list.clear()
     69                 chan.send(x)
     70 
     71     finally:
     72         # 重新设置终端属性
     73         termios.tcsetattr(sys.stdin, termios.TCSADRAIN, oldtty)
     74 
     75 
     76 def run():
     77     db_dict = {
     78         'c1.salt.com': {
     79             'root': {'user': 'root', 'auth': 'r', "cert": 'key路径'},
     80             'alex': {'user': 'alex', 'auth': 'p', "cert": '密码'},
     81         },
     82         'c2.salt.com': {
     83             'root': {'user': 'root', 'auth': 'r', "cert": 'key路径'},
     84             'alex': {'user': 'alex', 'auth': 'p', "cert": '密码'},
     85         },
     86 
     87     }
     88 
     89     for row in db_dict.keys():
     90         print(row)
     91 
     92     hostname = input('请选择主机: ')
     93     tran = paramiko.Transport((hostname, 22,))
     94     tran.start_client()
     95 
     96     for item in db_dict[hostname].keys():
     97         print(item)
     98 
     99     username = input('请输入用户: ')
    100 
    101     user_dict = db_dict[hostname][username]
    102     if username['auth'] == 'r':
    103         key = paramiko.RSAKey.from_private_key_file(user_dict['cert'])
    104         tran.auth_publickey(username, key)
    105     else:
    106         pw = user_dict['cert']
    107         tran.auth_password(username, pw)
    108 
    109     # 打开一个通道
    110     chan = tran.open_session()
    111     # 获取一个终端
    112     chan.get_pty()
    113     # 激活器
    114     chan.invoke_shell()
    115 
    116     interactive_shell(chan)
    117 
    118     chan.close()
    119     tran.close()
    120 
    121 
    122 if __name__ == '__main__':
    123     run()
    124 
    125 提示用户选择主机和用户(记录操作日志)
    允许用户选择主机

    HTML

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

    浏览器负责将标签翻译成用户“看得懂”的格式,呈现给用户!

    Doctype告诉浏览器使用什么样的html或xhtml规范来解析html文档, dtd文件则包含了标记、attributes 、properties、约束规则。

     html包含head和body两部分

    <!DOCTYPE html>
    <html lang="en"> <!-- 标签属性-->
    <head>
        <meta http-equiv="content-type" content="text/html;charset=UTF-8">
        <title>oldboy</title>
        <!--meta http-equiv="Referer" content="5"--> <!--30s刷新一次-->
        <meta http-equiv="Referer" Content="5; Url=http://www.baidu.com"/>
        <meta name="keywords" content="星际2,老男孩,专访">
        <meta name="description" content="汽车之家"> <!--描述-->
        <meta http-equiv="X-UA-COMPATIBLE" content="IE=edge"/> <!--如果用ie打开告诉ie用最新的模式渲染-->
    </head>
    <body style="margin: 0"> <!--使div标签填充顶部-->
    <!--块级标签;div-->
    <div style="height: 48px;background-color: #5e5e5e">asddd</div>
    <!--行内/内敛标签;a-->
    <a style="background-color: green">sdg&nbspe</a>
    <a>&lt;a&gt;</a>
    <p>abcd<br>defghij</p> <!--p表示段落,br表示换行-->
    <h1>大白</h1>
    <h6>小白</h6>
    <!--a标签用作跳转和锚点-->
    <a href="http://www.baidu.com" target="_blank">百度</a>
    <a href="#i1">第一章</a>
    <a href="#i2">第二章</a>
    <a href="#i3">第三章</a>
    <!--div块级标签  白板-->
    <div id="i1" style="background-color:green;height: 90px;"></div>
    <div id="i2" style="background-color:chartreuse;height: 80px;"></div>
    <div id="i3" style="background-color:red;height: 70px;"></div>
     1 <!DOCTYPE html>
     2 <html lang="en"> <!-- 标签属性-->
     3 <head>
     4     <meta http-equiv="content-type" content="text/html;charset=UTF-8">
     5     <title>oldboy</title>
     6     <!--meta http-equiv="Referer" content="5"--> <!--30s刷新一次-->
     7     <meta http-equiv="Referer" Content="5; Url=http://www.baidu.com"/>
     8     <meta name="keywords" content="星际2,老男孩,专访">
     9     <meta name="description" content="汽车之家"> <!--描述-->
    10     <meta http-equiv="X-UA-COMPATIBLE" content="IE=edge"/> <!--如果用ie打开告诉ie用最新的模式渲染-->
    11 </head>
    12 <body>
    13 <div><label for="user">用户名:</label><input id="user" type="text"/></div>
    14 <div>密 码:<input type="password"/></div>
    15 <div>性别:
    16     <div><input type="radio" name="geasf"/></div>
    17     <div><input type="radio" name="geasf"/></div>
    18 </div>
    19 <div>
    20     爱好:
    21     <div><input type="checkbox"/></div>
    22     <div><input type="checkbox"/></div>
    23     <div>海涛<input type="checkbox"/></div> <!--checkbox复选框-->
    24 </div>
    25 <div>上传:<input type="file"/></div>
    26 <div>
    27     城市:
    28     <select>  <!--下拉框-->
    29         <option>上海</option>
    30         <option>北京</option>
    31         <option>河南</option>
    32         <option>沙河</option>
    33     </select>
    34     <select multiple size="10">  <!--下拉框-->
    35         <optgroup label="河南">
    36             <option>郑州</option>
    37             <option>商丘</option>
    38             <option>周口</option>
    39         </optgroup>
    40           <optgroup label="河北">
    41             <option>石家庄</option>
    42             <option>唐山</option>
    43             <option>保定</option>
    44         </optgroup>
    45         <option>上海</option>
    46         <option>beijing</option>
    47         <option>nanjing</option>
    48         <option>沙河</option>
    49     </select>
    50     </div>
    51 <div>
    52     简介:
    53     <textarea></textarea>
    54 </div>
    55 </body>
    56 </html>
     1 <!DOCTYPE html>
     2 <html lang="en">
     3 <head>
     4     <meta charset="UTF-8">
     5     <title>oldboy</title>
     6 </head>
     7 <body style="margin: 0">
     8 <div style="height: 48px;background-color: #5e4b7c;"></div>
     9 <!--form包裹内容数据-->
    10 <form action="http://192.168.12.90:8000/index/" method="POST" enctype="multipart/form-data">
    11     <h1>用户登陆</h1>
    12     <input type="file" name="upload"/>
    13     <!--value指定默认用户名,placeholder提示字符-->
    14     <!--<p>用户名: <input type="text" name="username" value="root"/></p>-->
    15     <p>用户名: <input type="text" name="username" placeholder="pls int user"/></p>
    16     <p>密码: <input type="password" name="pwd"/></p>
    17     <dev>性别:
    18         <div><input type="radio" name="g" value="1" checked="checked"/></div>
    19         <div><input type="radio" name="g" value="0"/></div>
    20     </dev>
    21     <div>
    22         爱好:男 <input type="checkbox" name="hobby" value="11"/>
    23<input type="checkbox" name="hobby" value="22"/>
    24         海涛 <input type="checkbox" name="hobby" value="haitao"/>
    25     </div>
    26     <select name="city1">
    27         <option value="88">上海</option>
    28         <option value="89">北京</option>
    29         <option value="uu">河南</option>
    30     </select>
    31     <select name="city2" multiple>
    32         <option value="uu" selected="selected">河南</option>
    33         <option value="uu" selected="selected">河北</option>
    34         <option value="12">沙河</option>
    35 
    36     </select>
    37     <textarea name="memo">来杯咖啡.....</textarea>
    38     <input type="button" value="按钮"/>
    39     <input type="submit" value="提交"/>
    40     <input type="reset" value="重置"/>
    41 </form>
    42 </body>
    43 </html>
    View Code

    tr、ul、ol、dl标签

     1 <!DOCTYPE html>
     2 <html lang="en">
     3 <head>
     4     <meta charset="UTF-8">
     5     <title>老男孩</title>
     6 </head>
     7 <body>
     8 <table border="1">
     9     <thead>
    10     <tr>
    11         <th>序号</th>
    12         <th>用户名</th>
    13         <th>密码</th>
    14         <th>操作</th>
    15     </tr>
    16     </thead>
    17     <tbody>
    18     <tr>
    19         <td>1</td>
    20         <td><input type="text"/></td>
    21         <td><select>
    22             <option>上海</option>
    23         </select></td>
    24         <td>
    25             <a href="#">删除</a>|<a href="http://www.baidu.com">编辑</a>
    26         </td>
    27     </tr>
    28     </tbody>
    29 </table>
    30 <!--图片路径--,如果图片没有,显示我是图片-->
    31 <img src="img/1.png" alt="我是图片" title="把鼠标拿走">
    32 <ul>
    33     <li>小刘</li>
    34     <li>小李</li>
    35     <li>小张</li>
    36 </ul>
    37 <ol>
    38     <li>小张</li>
    39     <li>小李</li>
    40     <li>张三</li>
    41 </ol>
    42 <dl>
    43     <dt>北京</dt> <!--标题-->
    44     <dd>丰台</dd>  <!--内容-->
    45     <dd>海淀</dd>
    46     <dd>朝阳</dd>
    47 </dl>
    48 <table border="1"><!---->
    49     <thead><!--表头-->
    50     <tr>
    51         <th>序号</th> <!--td代表一列-->
    52         <th>用户名</th> <!--td代表一列-->
    53         <th>密码</th> <!--td代表一列-->
    54     </tr> <!--tr代表一行-->
    55     </thead>
    56     <tbody>
    57     <tr>
    58         <td>1</td>
    59         <td>abc</td>
    60         <td>123123</td>
    61         <td>
    62             <a href="#">删除</a>|<a href="http://www.baidu.com">编辑</a>
    63         </td>
    64     </tr>
    65     <tr>
    66         <td>2</td>
    67         <td colspan="2">abd</td>
    68         <td>123456</td>
    69     </tr>
    70     <tr>
    71         <td rowspan="2">3</td>
    72         <td>abe</td>
    73         <td>123789</td>
    74     </tr>
    75     <tr>
    76 
    77         <td>abf</td>
    78         <td>123891</td>
    79     </tr>
    80     </tbody>
    81 </table>
    82 </body>
    83 </html>

    常用标签详解:

    head部分:

    meta定义编码、关键字、描述等信息

    1 <head>
    2     <meta http-equiv="content-type" content="text/html;charset=UTF-8"><!--编码-->
    3     <title>oldboy</title>
    4     <!--meta http-equiv="Referer" content="5"--> <!--5s刷新一次,跳转到百度-->
    5     <meta http-equiv="Referer" Content="5; Url=http://www.baidu.com"/>
    6     <meta name="keywords" content="星际2,老男孩,专访"> <!--关键字-->
    7     <meta name="description" content="汽车之家"> <!--描述-->
    8     <meta http-equiv="X-UA-COMPATIBLE" content="IE=edge"/> <!--如果用ie打开告诉ie用最新的模式渲染-->
    9 </head>

    body部分:

    <div></div> 块级标签,占整行

    <a></a>和<span></span>     行内/内敛标签,有多少占多少

    <a>&lt;a&gt;</a>  代表<a>

    <p></p>  表示段落

    <br>     表示换行

    <h1>test</h1>  字体显示又粗又大

    <h6>test</h6> 字体又细又小

    <a>标签用作跳转和锚点用,代码如下:

    1 <!--a标签用作跳转和锚点-->
    2 <a href="http://www.baidu.com" target="_blank">百度</a><!--自动跳转到百度,并单独新打开一个页面-->
    3 <a href="#i1">第一章</a>
    4 <a href="#i2">第二章</a>
    5 <a href="#i3">第三章</a>
    6 <div id="i1" style="background-color:green;height: 90px;"></div>
    7 <div id="i2" style="background-color:chartreuse;height: 80px;"></div>
    8 <div id="i3" style="background-color:red;height: 70px;"></div>
    View Code

    input标签 可以输入数据:

    1 <div>用户名:<input type="test"/></div> <!--输入用户名-->
    2 <div>密 码:<input type="password"/></div><!--输入密码,密文-->

    type = radio 圆形,可选中

    type = checkbox 四方框,可选中

    <input type="button" value="按钮"/>
    <input type="submit" value="提交"/> <!--提交form表单里面的数据-->
    <input type="reset" value="重置"/>
    1     <div><input type="radio" name="geasf"/></div> <!--圆形,复选框,name相同的情况下是互斥,只能单选-->
    2     <div>海涛<input type="checkbox"/></div> <!--checkbox四方形,复选框-->
    3 <div>上传:<input type="file"/></div> <!--可上传文件-->
    4 <div><label for="user">用户名:</label><input id="user" type="text"/></div><!--label用来聚焦,点击用户名光标自动到输入框--->
    5 <!--value指定默认用户名,placeholder提示字符-->
    6     <!--<p>用户名: <input type="text" name="username" value="root"/></p>-->
    7     <p>用户名: <input type="text" name="username" placeholder="pls int user"/></p>
    View Code

    <select></select>下拉框

    multiple size="10"  显示前10个数据
    <optgroup label="河北">  分级菜单

        <textarea name="memo">来杯咖啡.....</textarea> <!--简介,提示输入字符..-->

     form标签 包裹内容数据,所有要提交的数据都要有name

    <form action="http://192.168.12.90:8000/index/" method="POST" enctype="multipart/form-data"> <!--以post形式将from里面的数据提交到该地址-->
    

     table标签,用于表单制作

    <th> <td>分别代表表头和内容中的一列,镶嵌在tr中

    <tr>代表一行 

    rowspan=2 占用两行

    colspan =2占用两列

    fieldset用法:

    1 <fieldset>
    2         <legend>登录</legend> <!--边框--->
    3         <p>用户名:</p>
    4         <p>密码:</p>
    5     </fieldset>

    css相关:

    CSS前夕:
    height: 48px 定义高度
    100px 定义宽度
    background-color: #5e4b7c; 背景颜色
    color: white; 字体颜色
    line-height: 48px; 文本在48px中居中
    text-align: left 调整当前文本在福标签中的位置
    display: inline;
    display: block;
    display: inline-block
  • 相关阅读:
    正向代理和反向代理的区别和作用
    idea 2018版/2019版的破解
    vue 开发环境的搭建
    shell 脚本操作informix数据库
    linux 系统文件目录颜色及特殊权限对应的颜色
    Linux系统结构详解(转)
    Java中的I/O流全汇总,所有的I/O就一张图
    安装Maven后使用cmd 执行 mvn -version命令 报错JAVA_HOME should point to a JDK not a JRE
    JavaWeb开发使用jsp还是html做前端页面
    lin-cms-dotnetcore.是如何方法级别的权限控制的?
  • 原文地址:https://www.cnblogs.com/liumj0305/p/6306090.html
Copyright © 2011-2022 走看看