博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Python之Paramiko、前端之html学习_Day14
阅读量:6332 次
发布时间:2019-06-22

本文共 11237 字,大约阅读时间需要 37 分钟。

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.transport16         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.py22         # sftp.put('/tmp/location.py', '/tmp/test.py')23         # 将remove_path 下载到本地 local_path24         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.py29         # sftp.put('/tmp/location.py', '/tmp/test.py')30         # 将remove_path 下载到本地 local_path31         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 = username10         self.pwd = pwd11         self.__k = None12 13     def run(self):14         self.connect()15         pass16         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 = transport22 23     def close(self):24         self.__transport.close()25 26     def cmd(self, command):27         ssh = paramiko.SSHClient()28         ssh._transport = self.__transport29         # 执行命令30         stdin, stdout, stderr = ssh.exec_command(command)31         # 获取命令结果32         result = stdout.read()33         return result34 35     def upload(self,local_path, target_path):36         # 连接,上传37         sftp = paramiko.SFTPClient.from_transport(self.__transport)38         # 将location.py 上传至服务器 /tmp/test.py39         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('\r\n*** EOF\r\n') 40                         break 41                     # 如果用户上一次点击的是tab键,则获取返回的内容写入在记录中 42                     if flag: 43                         if x.startswith('\r\n'): 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 == '\t': 59                     flag = True 60                 else: 61                     # 未点击TAB键,则将每个操作字符记录添加到列表中,以便之后写入文件 62                     temp_list.append(x) 63  64                 # 如果用户敲回车,则将操作记录写入文件 65                 if x == '\r': 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两部分

 
oldboy
asddd
sdg&nbspe<a>

abcd

defghij

大白

小白
百度第一章第二章第三章
1  2  
3 4
5 oldboy 6
7
8
9
10
11 12 13
14
密 码:
15
性别:16
17
18
19
20 爱好:21
22
23
海涛
24
25
上传:
26
27 城市:28
34
50
51
52 简介:53
54
55 56
1  2  3  4     
5 oldboy 6 7 8
9
10
11

用户登陆

12
13
14
15

用户名:

16

密码:

17
性别:18
19
20
21
22 爱好:男
23 女
24 海涛
25
26
31
37
38
39
40
41
42 43
View Code

tr、ul、ol、dl标签

1  2  3  4     
5 老男孩 6 7 8
9
10
11
12
13
14
15
16
17
18
19
20
21
24
27
28
29
序号 用户名 密码 操作
1 25 删除|编辑26
30
31 我是图片32
    33
  • 小刘
  • 34
  • 小李
  • 35
  • 小张
  • 36
37
    38
  1. 小张
  2. 39
  3. 小李
  4. 40
  5. 张三
  6. 41
42
43
北京
44
丰台
45
海淀
46
朝阳
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
64
65
66
67
68
69
70
71
72
73
74
75
76 77
78
79
80
81
序号 用户名 密码
1 abc 123123 62 删除|编辑63
2 abd 123456
3 abe 123789
abf 123891
82 83

常用标签详解:

head部分:

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

1 2     
3 oldboy4
5
6
7
8
9

body部分:

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

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

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

<p></p>  表示段落

<br>     表示换行

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

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

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

View Code

input标签 可以输入数据:

1 
用户名:
2
密 码:

type = radio 圆形,可选中

type = checkbox 四方框,可选中

   
1     
2
海涛
3
上传:
4
5
6
7

用户名:

View Code

<select></select>下拉框

multiple size="10"  显示前10个数据
  分级菜单
 

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

 table标签,用于表单制作

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

<tr>代表一行 

rowspan=2 占用两行

colspan =2占用两列

fieldset用法:

1 
2
登录
3

用户名:

4

密码:

5

css相关:

CSS前夕:     height: 48px                    定义高度     width: 100px                    定义宽度     background-color: #5e4b7c;      背景颜色     color: white;                   字体颜色     line-height: 48px;              文本在48px中居中     text-align: left                调整当前文本在福标签中的位置     display: inline;     display: block;     display: inline-block

转载于:https://www.cnblogs.com/liumj0305/p/6306090.html

你可能感兴趣的文章
IP_VFR-4-FRAG_TABLE_OVERFLOW【cisco设备报错】碎片***
查看>>
Codeforces Round #256 (Div. 2) D. Multiplication Table 【二分】
查看>>
ARM汇编指令格式
查看>>
HDU-2044-一只小蜜蜂
查看>>
HDU-1394-Minimum Inversion Number
查看>>
df -h 卡住
查看>>
第七天1
查看>>
[转] createObjectURL方法 实现本地图片预览
查看>>
JavaScript—DOM编程核心.
查看>>
JavaScript碎片
查看>>
Bootstrap-下拉菜单
查看>>
soapUi 接口测试
查看>>
【c学习-12】
查看>>
工作中MySql的了解到的小技巧
查看>>
loadrunner-2-12日志解析
查看>>
2013年蓝桥杯省赛C/C++A组真题解析
查看>>
C# Memcached缓存
查看>>
iOS开发NSLayoutConstraint代码自动布局
查看>>
正则表达式
查看>>
mysql [ERROR] Can't create IP socket: Permission denied
查看>>