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
留意一下公钥私钥保存的路径
打开路径查看
使用时还需要将公钥发送给服务器,不然服务器无法接收,发送公钥给服务器建议使用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根下的目录是一个有层次的树状结构,每一个目录都可以挂载在一个磁盘设备上。
挂载:由操作系统使一个存储设备(诸如硬盘、CD-ROM或共享资源)上的计算机文件和目录可供用户通过计算机的文件系统访问的一个过程。
挂载流程
临时挂载:将/mnt目录临时挂载
mount /dev/cdrom /mnt
查看是否挂载成功:多了很多文件代表成功
ls /mnt
取消挂载
umount /mnt
目录结构说明
网卡文件
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
查看磁盘分区
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
查看所有级别:
ls /usr/lib/systemd/system/runlevel*target -l
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
/etc/issue
⽤户登陆系统之前的提示信息。
echo Enter your account password!!!! >> /etc/issue