linux02

paramiko模块

命令操作

作用一:连接服务器并执行相关操作。

连接方式一:用户名和密码的方式

import paramiko

# 创建ssh对象
ssh = paramiko.SSHClient()
# 允许链接不在know_hosts文件中主机
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
# 链接服务器
ssh.connect(hostname='10.0.0.200', port=22, username='root', password='123')
# 执行命令
# stdin, stdout, stderr = ssh.exec_command('ip a')
stdin, stdout, stderr = ssh.exec_command('ls')
"""
stdin       输入的内容
stdout      输出的内容
stderr      错误的内容
"""
# 获取结果
res = stdout.read()  # 基于网络传输 该结果是一个bytes类型
print(res.decode('utf-8'))
# 断开链接
ssh.close()

连接方式二:使用公钥私钥

公钥私钥讲解:http://t.csdn.cn/EKDrV

公钥的创建可以在cmd窗口输入命令,然后连续按enter键即可。

ssh-keygen -t rsa

留意一下公钥私钥保存的路径
image
打开路径查看
image

使用时还需要将公钥发送给服务器,不然服务器无法接收,发送公钥给服务器建议使用git。下载地址:Git (git-scm.com)

打开git,输入命令,然后按提示输入信息。

ssh-copy-id -i '公钥路径' root@10.0.0.200

root@10.0.0.200:root是服务器的用户名,10.0.0.200是服务器的id地址。

import paramiko
# 读取本地私钥
private_key = paramiko.RSAKey.from_private_key_file(r'C:\Users\Administrator\.ssh\id_rsa')
# 创建SSH对象
ssh = paramiko.SSHClient()
# 允许连接不在know_hosts文件中的主机
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
# 连接服务器
ssh.connect(hostname='10.0.0.200', port=22, username='root', pkey=private_key)
# 执行命令
stdin, stdout, stderr = ssh.exec_command('ls')
# 获取命令结果
result = stdout.read()
print(result.decode('utf-8'))
# 关闭连接
ssh.close()

文件上传

方式一:使用用户名和密码

import paramiko
# 服务器的ip地址和端口号,一般都是22
transport = paramiko.Transport(('10.0.0.200', 22))
# 用户名和密码
transport.connect(username='root', password='123')
sftp = paramiko.SFTPClient.from_transport(transport)
# 上传文件,注意上传文件到远程某个文件夹下,文件夹必须存在
sftp.put("a.txt", '/root/a.txt')
# 下载文件,将远程文件下载到本地
sftp.get('/root/a.txt', 'b.txt')
transport.close()

方式二:使用公钥私钥

import paramiko
private_key = paramiko.RSAKey.from_private_key_file(r'C:\Users\Administrator\.ssh\id_rsa')
transport = paramiko.Transport(('10.0.0.200', 22))
transport.connect(username='root', pkey=private_key)
sftp = paramiko.SFTPClient.from_transport(transport)
# 上传文件
sftp.put("a.txt", '/root/a.txt')
# 下载文件
sftp.get('/root/a.txt', 'b.txt')
transport.close()

整合

import paramiko

class SSHProxy(object):
    def __init__(self, hostname, port, username, password):
        self.hostname = hostname
        self.port = port
        self.username = username
        self.password = password
        self.transport = None
    # 给对象建立一个上传下载文件对象连接
    def open(self):  
        self.transport = paramiko.Transport((self.hostname, self.port))
        self.transport.connect(username=self.username, password=self.password)
    # 执行命令的接口
    def command(self, cmd):
        ssh = paramiko.SSHClient()
        ssh._transport = self.transport
        stdin, stdout, stderr = ssh.exec_command(cmd)
        result = stdout.read()
        return result
    # 上传文件的接口
    def upload(self, local_path, remote_path):
        sftp = paramiko.SFTPClient.from_transport(self.transport)
        sftp.put(local_path, remote_path)
        sftp.close()
    def close(self):
        self.transport.close()
    def __enter__(self):
        self.open()
        return self
    def __exit__(self, exc_type, exc_val, exc_tb):
        self.close()

使用:

with SSHProxy(hostname='10.0.0.200', port=22, username='root', password='123') as obj:
    print(obj.command('ls').decode('utf8'))
    obj.upload(r'a.txt', '/root/a.txt')

Linux目录结构

Linux根下的目录是一个有层次的树状结构,每一个目录都可以挂载在一个磁盘设备上。

image

挂载:由操作系统使一个存储设备(诸如硬盘、CD-ROM或共享资源)上的计算机文件和目录可供用户通过计算机的文件系统访问的一个过程。

挂载流程

临时挂载:将/mnt目录临时挂载

mount /dev/cdrom /mnt

查看是否挂载成功:多了很多文件代表成功

ls /mnt

取消挂载

umount /mnt

目录结构说明

image

网卡文件

Linux中网卡文件代表着你是否可以访问互联网。

网卡配置⽂件

修改网卡配置文件(建议修改前先备份)

vi /etc/sysconfig/network-scripts/ifcfg-eth0

如果没有此文件那就用下面的命令,版本不同名称也会不同。

vi /etc/sysconfig/network-scripts/ifcfg-ens33

网卡配置文件重要信息:

BOOTPROTO=none # 启动协议,获取IP地址的⽅法 ⾃动获取/dhcp⼿动设置
DEFROUTE=yes # 开启了默认路由 ⽹络(默认路由/动态路由/静态路由)
NAME=eth0 # ⽹卡逻辑名称
UUID=... # 在虚拟化软件标识⼀些硬件设备信息
DEVICE=eth0 # ⽹卡设备名称
ONBOOT=yes # 确保⽹卡是否处于激活状态
IPADDR=10.0.0.200 # IP地址设置
PREFIX=24 # 设置⼦⽹掩码确保⼀个局域⽹⾥⾯可以连接多少台主机默认253
GATEWAY=10.0.0.254 # ⽹关信息,不同局域⽹之间进⾏通讯的必经关卡,需要和虚拟编辑器中nat⽹卡设置保持⼀致
IPV6_PRIVACY=no
DNS1=114.114.114.114 # DNS 域名解析服务 

如果修改了网卡文件需要重启网络服务:

systemctl restart network

DNS服务设置

确实DNS服务就无法用过域名来访问,只能通过ip地址访问,比如原本我可以直接访问www.baidu.com,但因为我没有DNS服务,只能通过百度的ip地址:202.108.22.5才能访问到百度。

DNS可以设置如下的几种。

阿里云DNS服务地址:

223.5.5.5
223.6.6.6

通用DNS服务地址:

114.114.114.114
114.114.114.119

移动DNS服务器(谷歌DNS服务器)

8.8.8.8

使用自己的网关地址充当DNS服务地址

10.0.0.254

网卡域名解析配置文件

修改域名解析配置文件(即修改DNS服务地址)

vi /etc/resolv.conf

网卡的DNS配置会同时修改resolv.conf文件中的配置。

主机名称配置⽂件

centos6 修改主机名称(永久修改),需要重启服务器

vi /etc/sysconfig/network

centos7 修改主机名称(永久修改),需要重启服务器

vi /etc/hostname

使用命令临时修改,需要重新连接,才能生效;如果服务器重启了,那么主机名称又会变回去了。

hostname localhost001

centos7 特殊修改主机名称方式(永久修改),需要重启服务器

hostnamectl set-hostname localhost001

本地域名解析⽂件

修改:

vi /etc/hosts

假设有如下配置:

202.108.22.5  bd

这时候ping bd就相当于是ping 202.108.22.5。

etc常见文件

/etc/fstab

系统挂载信息表

cat /etc/fstab

image

查看磁盘分区

blkid

/etc/rc.local

此文件中只能存放linux系统命令操作信息

cat /etc/rc.local

执行流程:系统正常加载启动 --- 读取rc.local文件 --- 执行文件中的命令 --- 系统启动成功。

比如设置开机自动备份:

echo cp /etc/rc.local /tmp/rc.local  >> /etc/rc.local

centos7需要在输入一行命令才能生效:

chmod +x /etc/rc.d/rc.local

/etc/inittab

存放系统启动运行的级别,一共有7个级别。

查看目前的级别:

cat /etc/inittab

image

查看所有级别:

ls /usr/lib/systemd/system/runlevel*target -l

image

centos6启动级别:

  • 0 - 关机
  • 1 - 单用户模式(重置用户密码信息root 修复系统)
  • 2 - 多用户,没有NFS(没有网络)
  • 3 - 完全多用户模式(命令行模式)
  • 4 - 未使用
  • 5 - 图形化界面模式
  • 6 - 重启

centos7启动目标:

  • 0 - 关机
  • 1 - 单用户模式
  • 2 - 多用户模式
  • 3 - 多用户模式
  • 4 - 多用户模式
  • 5 - 图形化界面模式
  • 6 - 重启

修改级别:

centos6:

init 级别信息 # 临时修改
vim /etc/inittab # 永久修改

centos7:

systemctl get-default # 获取级别信息
systemctl set-default 级别信息 # 修改级别

/etc/profile

配置环境变量信息或者别名信息文件。

获取环境变量值:

echo $名称

定义变量:

ABC=123

获取变量:

echo $ABC

/etc/bashrc

专门用于设置别名信息。

设置别名可以使命令简单化,比如:

ls -l

别名:

ll

别名的定义既可以在profile⾥⾯也可以在bashrc⾥设置

/etc/profile # 国法 
/etc/bashrc # 国法
~/.bashrc # 家规
~/.bash_profile # 家规 

/etc/motd

⽤户登陆系统之后的提示信息。

echo 欢迎登录 >> /etc/motd

image

/etc/issue

⽤户登陆系统之前的提示信息。

echo Enter your account password!!!! >> /etc/issue

image

posted @ 2022-06-08 20:09  Yume_Minami  阅读(48)  评论(0编辑  收藏  举报