Linux paramiko模块 公钥私钥 数据传输代码封装 网卡文件及克隆操作 ETC常见文件
paramiko模块
功能:python代码连接服务器并执行相关操作 连接服务器方式: 1.用户名密码的方式 2.公钥私钥的方式 下载:pip3 install paramiko # 用户名和密码的方式 import paramiko # 创建ssh对象 ssh = paramiko.SSHClient() # 允许链接不在know_hosts文件中主机 ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) # 链接服务器 ssh.connect(hostname='192.168.202.133', port=22, username='root', password='lamb') # 执行命令 # 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()
公钥私钥
比较有趣的解释:鲍勃的公钥私钥 https://blog.csdn.net/qq_34771403/article/details/73481172 """ 公钥可以随便给别人 但是私钥一定不能泄露!!! """ ssh-keygen -t rsa 连续按enter即可 下载git辅助操作 ssh-copy-id -i 公钥地址 username@hostname
"""
mac
ssh-keygen -t rsa
ssh-copy-id -i ~/.ssh/id_rsa.pub username@hostname
cat ~/.ssh/id_rsa
windows
1.下载git并安装(提供windows环境的linux操作界面)
https://git-scm.com/
2.右键git bash here进入git终端(相当于linux界面)
ssh-keygen -t rsa
3.拷贝公钥至远程服务器
ssh-copy-id -i 公钥文件路径 username@hostname
"""
# 公钥和私钥(先讲公钥保存到服务器上) import paramiko # 读取本地私钥 private_key = paramiko.RSAKey.from_private_key_file(r'C:/Users/E/.ssh/id_rsa') # 创建SSH对象 ssh = paramiko.SSHClient() # 允许连接不在know_hosts文件中的主机 ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) # 连接服务器 ssh.connect(hostname='192.168.1.129', 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 # 用户名和密码 transport = paramiko.Transport(('192.168.1.129', 22), ) transport.connect(username='root', password='dragon200831') sftp = paramiko.SFTPClient.from_transport(transport) # 上传文件 # sftp.put("a.txt", '/data/tmp.txt') # 注意上传文件到远程某个文件下 文件必须存在 # 下载文件 sftp.get('/data/tmp.txt', 'hhh.txt') # 将远程文件下载到本地并重新命令 transport.close()
# 公钥私钥方式 import paramiko private_key = paramiko.RSAKey.from_private_key_file(r'C:/Users/E/.ssh/id_rsa') transport = paramiko.Transport(('192.168.1.129', 22)) transport.connect(username='root', pkey=private_key) sftp = paramiko.SFTPClient.from_transport(transport) # 将location.py 上传至服务器 /tmp/test.py sftp.put('/tmp/location.py', '/tmp/test.py') # 将remove_path 下载到本地 local_path # sftp.get('remove_path', 'local_path') 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 # 该方法返回什么 with ... as 后面就拿到什么 def __exit__(self, exc_type, exc_val, exc_tb): self.close() if __name__ == '__main__': with SSHProxy(hostname='s',port=22,username='root',password='dragon200831') as obj: print(obj.command('ip a')) obj.upload(r'a.txt','/data/b.txt')
网卡文件及克隆操作
1.⽹卡配置⽂件 /etc/sysconfig/network-scripts/ifcfg-eth0 ens33 # 编辑⽹卡⽂件时可以先提前备份⼀份 cp xxx /tmp/xxx.bak ps:esc + . 调⽤上⼀个命令最后⼀个参数信息 # ⽹卡⽂件修改后,必须重启⽹络服务 systemctl restart network 初始化软件安装 yum install -y vim tree bashcompletion(提供命令参数补全功能 systemctl) """ 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 DNS=114.114.114.114 DNS 域名解析服务 """
2.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 3.⽹卡域名解析配置⽂件 /etc/resolv.conf vi /etc/resolv.conf nameserver 114.114.114.114 nameserver 223.5.5.5 PS: 配置完成,⽴即⽣效 ⽹卡的dns配置优先于resolv.conf⽂ 件中的配置
4.主机名称配置⽂件 centos6 /etc/sysconfig/network 主机名称配置⽂件 centos7 /etc/hostname 主机名称配置⽂件 修改主机名称 第⼀个⾥程:利⽤命令修改主机名称 # 临时修改 hostname jasonNB ps:修改完成,需要重新连接,才能命令⽣效 第⼆个⾥程:编辑修改配置⽂件 # 永久修改 vi /etc/hostname centos7有特殊修改主机名称⽅式 hostnamectl set-hostname oldboyds05 5.本地域名解析⽂件 /etc/hosts ⽹站⻚⾯信息变更 ⼩公司 直接调试线上服务器 夜⾥操作 ⼤企业 直接调试测试服务器测试访问 模拟真实环境访问 京东线上⽹站服务器地址 112.65.34.1 京东线下⽹站服务器地址 10.0.0.200
ETC常见文件
1./etc/fstab # filesystem table 系统挂载信息表 磁盘 --- 分区格式化 --- 系统中可以看到磁盘设备 --- 挂载 (开了个⻔) PS:所有存储设备必须挂载才能使⽤ 临时挂载:mount /dev/cdrom /mnt 永久挂载:修改⼀个和开机⾃动挂载相关的配置⽂件 /etc/fstab 设备⽂件 挂载点 /dev/第⼀个分区 : /boot /dev/第⼆个分区 : swap /dev/第三个分区 : / cat /etc/fstab # 查看⽂件内容 blkid # 查看磁盘分区 总结:实现磁盘存储设备,挂载操作永久⽣效,开机⾃动加载挂载 信息 2./etc/rc.local # 此⽂件中只能存放linux系统命令操作信息 系统正常加载启动 --- 读取rc.local⽂件 --- ⽂件主要保存命令 信息 --- 执⾏⽂件中的命令 --- 系统启动成功 eg:开机⾃动备份 cp /etc/sysconfig/network-scripts/ifcfg-eth0 /tmp/ifcfg-eth0.bak echo "cp /etc/sysconfig/network-scripts/ifcfgeth0 /tmp/ifcfg-eth0.bak" >> /etc/rc.local """ centos6:按照以上说明进⾏操作即可 centos7:chmod +x /etc/rc.d/rc.local """ 运维操作规范(运维⼈员==救⽕队员) 1)操作之前进⾏检查 2)操作之前进⾏备份 3)操作之后进⾏确认 4)操作之后进⾏总结 具体操作: 1)检查相应路径是否存在备份⽂件 有备份⽂件:进⾏删除 2) 先在命令⾏进⾏测试执⾏ 3)编辑开机⾃动加载命令配置⽂件rc.local 4)重启系统进⾏确认 3./etc/inittab # centos6 vs centos7 系统启动运⾏级别 系统启动时候: A系统启动:⽹络服务运⾏ 安全服务运⾏ 存储服务运⾏ 01级 别 B系统启动:安全服务运⾏ 存储服务运⾏ 02级 别 C系统启动:存储服务运⾏ 03级 别 三种系统:运⾏启动级别不⼀样 centos6 (7种运⾏级别) 0 关机级别(init 0) 1 单⽤户模式(重置⽤户密码信息root 修复系统) 救援模式 2 多⽤户模式 NFS (没有⽹络服务) 3 多⽤户模式 (命令⾏模式) 4 未知 未使⽤ 5 图形化界⾯模式(init 5) 6 重启级别 centos7 (target⽬标) ls /usr/lib/systemd/system/runlevel*target -l poweroff.target rescue.target multi-user.target multi-user.target multi-user.target graphical.target reboot.target # 调整系统运⾏级别 centos6 init 级别信息 临时修改 vim /etc/inittab 永久修改 centos7 systemctl get-default 获取级别信息 systemctl set-default 修改了级别
4./etc/profile # 配置环境变量信息或者别名信息⽂件(重要) 环境变量特征 01. 环境变量都⽤⼤写字⺟表示 02. 环境变量可以被所有⽤户所使⽤ 03. 环境⼀般是系统安装就已经设置 # 第⼀个⾥程:定义变量 [root@jasonNB ~]# oldboy=123 # 第⼆个⾥程:调取变量信息 [root@jasonNB ~]# echo $oldboy # 第三个⾥程:调整变量值信息 [root@jasonNB ~]# oldboy=456 [root@jasonNB ~]# echo $oldboy 5./etc/bashrc # 专⻔⽤于设置别名信息 别名概念说明(先提前了解) 使复杂命令简单化 [root@jasonNB ~]# ls -l /etc/hosts -rw-r--r--. 1 root root 181 Dec 7 12:28 /etc/hosts [root@jasonNB ~]# ll /etc/hosts -rw-r--r--. 1 root root 181 Dec 7 12:28 /etc/hosts '''别名的定义既可以在profile⾥⾯也可以在bashrc⾥设置''' /etc/profile 国法 /etc/bashrc 国法 ~/.bashrc 家规 ~/.bash_profile 家规
6./etc/motd # ⽤户登陆系统之后提示信息 佛祖保佑 永不宕机
7./etc/issue /etc/issue.net(centos7多) # ⽤户登陆系统之 前提示信息 [root@jasonNB ~]# cat /etc/issue [root@jasonNB ~]# echo > /etc/issue [root@jasonNB ~]# echo > /etc/issue.net usr⽬录下重要的数据⽂件 [root@jasonNB ~]# cat /etc/issue

浙公网安备 33010602011771号