python远程控制Linux

远程控制Linux

自动安装产品到Linux
自动化用例的一些步骤 #log里面读取信息
运维
环境监控
数据的自动获取,分析
方案
Paramiko #主流的库
Pexpect #相对早一点
执行下面的命令

pip install paramiko --default-timeout=60           #国外的源,时间设置的长一点
pip install paramiko -i https://pypi.douban.com/simple/--trusted-host pypi.douban.com       #国内豆瓣的源
  • 保证 ssh 服务开启
    用putty 链接看看 #远程连接工具

常见的linux命令

  • ls:列出当前目录下所有的目录(相当于dos下的dir) #windows下面的dir

  • pwd:当前目录

  • cat:查看内容(cat 1.txt)(内容较少)

  • more:查看内容(内容较多)

  • clear:清屏

  • mkdir xxx:创建目录

  • cd xxx:进入目录

  • cd -:返回到上一次所处的目录

  • cd ~:命令切换到当前用户的家目录

  • cd ~username:切换到其他用户的家目录

  • echo “XX” > YY:将内容XX存到文件YY中

  • date +%Y%m%d_%H%M%S;free:获取内存信息

  • date:查看系统时间

  • date “+%Y-%m-%d %H:%M:%S”:查看系统时间,格式:2017-08-24 16:29:12

  • date -s “20170901 8:30:00”: 设置系统时间

  • clock --show:查看硬件时间(bios时间)

  • clock --hctosys:更改系统时间为硬件时间(hc代表硬件时间,sys代表系统时间)

  • clock --systohc:更改硬件时间为系统时间(hc代表硬件时间,sys代表系统时间)

  • reboot:重启

  • poweroff:关闭系统

  • uname
    -a:完整地查看当前系统的内核名称、主机名、内核发行版本、节点名、系统时间、硬件名称、硬件平台、处理器类型以及操作系统名称等信息

  • cat /etc/redhat-release:查看当前系统版本的详细信息

  • free -h :内存使用情况

  • who:用于查看当前登入主机的用户终端信息

  • tail -n 20:查看文件的最后20行

  • tail -f 文件名:查看实时日志

  • locale:查看系统字符集

  • echo “dasdsadasdasds” > file1 #把内容写入到file1里面*

代码

import paramiko
#创建SSHClient 实例对象
ssh = paramiko.SSHClient()        #通过SSHClient类实力一个对象,只要支持远程的ssh协议

#调用方法,表示没有存储远程机器的公钥,允许访问
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())      #通过对方的一个密钥的存储,把密钥文件,防止钓鱼机

#连接远程机器  地址、端口、用户名密码
ssh.connect("ci.ytesting.com",22,"stt", "Songqin123")       #ci.ytesting.com域名,端口22,stt用户名,songqin123密码
#具体操作
#创建目录
cmd = 'mkdir jcy2'     #创建目录
ssh.exec_command(cmd)       #调用这个命令才会执行

#如果命令跨行
cmd = '''echo '1234
5678
90abc' > myfile
'''
ssh.exec_command(cmd)

#获取命令的执行结果
cmd = 'cat myfile'      #看他的文件,cmd是变量
stdin, stdout, stderr = ssh.exec_command(cmd)       # ssh.exec_command(cmd) 返回的是文件对象,stdin远程的标准输入,stdout远程标准输出,一般是正确的。stderr一般是错误的输出。赋值给3个变量

output = stdout.read()+ stderr.read()   #把正确的错误的read一下,加起来。文件2进制读出来是2进制类型。只加后面两个
print(output.decode('utf8'))            #用UTF-8解码,decode
ssh.close()

注意点
exec_command 每次执行会新打开一个channel执行 #类似于新打开一个终端,都是在用户登陆的根目录下执行的
新的环境,不在上次执行的环境里面
所以,我们不能多次调用,达到多次调用的目的

比如:

ssh.exec_command(pwd)
ssh.exec_command("mkdir a123")
ssh.exec_command("mkdir b123")
stdin, stdout, stderr = ssh.exec_command("pwd")
print (stdout.read())   #此时不是在b123的目录下面,还是在用户登录的根目录下面/home/stt

如果一定要上下命令关联,可以多个命令同时执行 比如 cd a123;pwd
代码如下:

import paramiko
ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect("ci.ytesting.com",22,"stt", "Songqin123")

cmd = "pwd;mkdir jcy4;cd jcy4;pwd;mkdir jcy44"
stdin, stdout, stderr = ssh.exec_command(cmd)

print(stdout.read().decode())
ssh.close()

#结果:b'/home/stt\n/home/stt/jcy4\n'

获取数据进行分析

例如 内存使用

代码如下:

import paramiko
ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect("ci.ytesting.com",22,"stt", "stt0707")


stdin, stdout, stderr = ssh.exec_command("date +%Y%m%d_%H%M%S;free")      #free当前系统的内存使用率   data可以看到当前的时间,合起来就可以看到某个时间点的内存信息,如在一个循环里,每个几秒钟执行一次,还可以用别的工具把它回执图表

print(stdout.read())
ssh.close()

传输文件到远程服务器

import paramiko
ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect("ci.ytesting.com",22,"stt", "Songqin123")

sftp = ssh.open_sftp()      #打开文件传输的通道
sftp().put("ftp1.py","/home/stt/ftp3.py")       #前面的是本地文件,后面的是路径和新起的名字
sftp.close()

从远程机器拷贝文件到本机 #拉去日志分析

import paramiko
ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect("ci.ytesting.com",22,"stt", "Songqin123")

sftp = ssh.open_sftp()      #打开文件传输的通道
sftp().get("/home/stt/myfile","d:/myfile1.txt")       #前面的是本地文件,后面的是路径和新起的名字
sftp.close()
ssh.close()

猜你喜欢

转载自blog.csdn.net/qq_37615098/article/details/84037960