一、paramiko
利用paramiko可以远程控制服务器,上传和下载文件。
1、paramiko密码登录方式:
1 #!/usr/bin/env python
2 #coding:utf-8import paramiko
3
4 ssh = paramiko.SSHClient() #创建链接
5 ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
6 #在远程服务器上设置签名。第一次登录服务器时,会输入YES/No
7 #在用户目录/.ssh/known_hosts文件里会有主机的登录签名。如果没有记录,在第一次登录时显示YES/NO
8 ssh.connect('192.168.1.108', 22, 'alex', '123') #连接输入的信息
9 stdin, stdout, stderr = ssh.exec_command('df') #执行命令
10 print stdout.read() #打印结果
11 ssh.close(); #关闭链接
paramiko密码登录
2、paramiko密钥对登录方式:
密钥的方式,
1.生成密钥对
2.将自己的公钥传至目标服务器
3.提取自己私钥的路径
4.建立连接
1 ssh-keygen -t rsa #生成一个自己的公钥
2 ssh-copy-id -i chenchao@192.168.1.100 #发送自己的公钥到目标服务器的登录用户的家目录下,默认会到当前用户的目录下去找公钥 ~/.ssh/id_rsa.pub,下次在登录时就不在需要密码了
3
4 import paramiko
5
6 private_key_path = '/root/.ssh/id_rsa' #声明自己的私钥在哪里 private:私有的
7 key = paramiko.RSAKey.from_private_key_file(private_key_path) #取出私钥,保存
8 ssh = paramiko.SSHClient() #创建链接
9 ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) #第一次登录时,自动设置签名 YES/NO
10 ssh.connect('主机名 ', 端口, username='用户名', pkey=key) #登录的信息
11 stdin, stdout, stderr = ssh.exec_command('df') #执行命令
12 print stdout.read()
13 ssh.close()
paramiko密钥对登录
3、远程上传下载文件:
1 #!/usr/bin/env python
2 #conding:utf-8
3
4 import paramiko
5
6
7 t = paramiko.Transport(('192.168.1.107',22)) #创建链接
8 t.connect(username='root',password='pwd@123') #输入目标服务器的用户名和密码
9
10 sftp = paramiko.SFTPClient.from_transport(t) #生成连接对象
11
12 sftp.put('/python/coder/connect.py','/opt/test.py') #上传 源地址文件 目标地址文件
13 #sftp.get('/opt/123.txt','/python/coder/123.txt') #下载
14 t.close()
paramiko传送文件
1、先将执行的结果放入一个文件中
2、逐行读取文件,将每行的内容按照空格分割成列表
3、在利用csv模块方法,将分割的列表写入到csv后缀的表格文件中
二、将paramiko执行的结果放入excel表格文件里
1、python中自带csv模块
- 用python读取csv文件
csv是逗号分隔符格式 一般我们用的execl生成的格式是xls和xlsx 直接重命名为csv的话会报错:
Error: line contains NULL byte
insun解决方案:出错原因是直接是把后缀为xls的execl文件重命名为csv的 正常的要是另存为csv文件 就不会报错了
譬如我们有这么个csv文件:
1 #!/usr/bin/env python
2 # -*- coding:utf-8 -*-
3
4 import csv
5 with open('egg.csv','rb') as f:
6 reader = csv.reader(f)
7 for row in reader:
8 print row
打印出来是这样的list
['a', '1', '1', '1']
['a', '2', '2', '2']
['b', '3', '3', '3']
['b', '4', '4', '4']
['b', '5', '5', '5']
- 用python写入并生成cs
1 #!/usr/bin/env python
2 # -*- coding:utf-8 -*-
3
4 import csv
5 with open('egg2.csv', 'wb') as csvfile:
6 spamwriter = csv.writer(csvfile, delimiter=' ',quotechar='|', quoting=csv.QUOTE_MINIMAL)
7 spamwriter.writerow(['a', '1', '1', '2', '2'])
8 spamwriter.writerow(['b', '3', '3', '6', '4'])
9 spamwriter.writerow(['c', '7', '7', '10', '4'])
10 spamwriter.writerow(['d', '11','11','11', '1'])
11 spamwriter.writerow(['e', '12','12','14', '3'])
这样存进去的是存到一列了 跟我们原本意图存进5列不一样
dialect=’excel’
代码修改为:
1 #!/usr/bin/env python
2 # -*- coding:utf-8 -*-
3
4 import csv
5 with open('egg2.csv', 'wb') as csvfile:
6 spamwriter = csv.writer(csvfile,dialect='excel')
7 spamwriter.writerow(['a', '1', '1', '2', '2'])
8 spamwriter.writerow(['b', '3', '3', '6', '4'])
9 spamwriter.writerow(['c', '7', '7', '10', '4'])
10 spamwriter.writerow(['d', '11','11','11', '1'])
11 spamwriter.writerow(['e', '12','12','14', '3'])
2、利用paramiko与csv结合
1 #!/usr/bin/python
2 #coding:utf-8
3
4 import paramiko
5 import csv
6
7 ssh = paramiko.SSHClient() #创建链接
8 ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) #设置第一次登录的yes/no
9 ssh.connect('192.168.1.108',22,'root','Pwd@1234') #密码登录方式
10 stdin,stdout,stderr = ssh.exec_command('esxcli network ip interface ipv4 get') #执行的命令
11 w = stdout.read() #拿到执行的结果 字符串格式
12 ssh.close() #关闭连接
13 obj = open('read_test','wb+') #将执行的结果放入文件中保存
14 obj.write(w)
15 obj.close()
16
17 with open('read_test','rb') as txt_file: #打开保存结果的文件
18 with open('test_excel.csv', 'wb') as excl_file: #打开一个新文件保存
19 spamwriter = csv.writer(excl_file,dialect='excel') #创建excel格式的文件对象
20 for line in txt_file.readlines(): #读取结果文件的每一行
21 re = line.split() #按照空格分割将每行转为列表
22 spamwriter.writerow(re) #写入到文件当中
结果存入excel表格