paramiko模块、公钥与私钥、linux系统目录结构
功能: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='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()
比较有趣的解释:鲍勃的公钥私钥 https://blog.csdn.net/qq_34771403/article/details/73481172 """ 公钥可以随便给别人 但是私钥一定不能泄露!!! """ ssh-keygen -t rsa 连续按enter即可 下载git辅助操作 # 公钥和私钥(先讲公钥保存到服务器上)
import paramiko
# 读取本地私钥
private_key = paramiko.RSAKey.from_private_key_file(r'C:\Users\asus\.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 # # 用户名和密码 # transport = paramiko.Transport(('10.0.0.200', 22), ) # transport.connect(username='root', password='123') # 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\asus\.ssh\id_rsa')
transport = paramiko.Transport(('10.0.0.200', 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): print('with开始') self.open() return self # 该方法返回什么 with ... as 后面就拿到什么 def __exit__(self, exc_type, exc_val, exc_tb): print('with结束') self.close() if __name__ == '__main__': # obj = SSHProxy(hostname='10.0.0.200',port=22,username='root',password='123') # obj.open() # print(obj.command('ip a')) # print(obj.command('ls /')) # print(obj.command('ls -l')) # obj.upload(r'hhh.txt','/data/heihei.txt') # obj.close() with SSHProxy(hostname='10.0.0.200',port=22,username='root',password='123') as obj: print(obj.command('ip a')) obj.upload(r'a.txt','/data/b.txt')
vim模式转换图
目录结构
1.?卡配置?件 /etc/sysconfig/network-scripts/ifcfg-eth0 ens33 # 编辑?卡?件时可以先提前备份?份 cp xxx /tmp/xxx.bak ps:esc + . 调?上?个命令最后?个参数信息 # ?卡?件修改后,必须重启?络服务 systemctl restart network 初始化软件安装 yum install -y vim tree bash?completion(提供命令参数补全功能 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
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/ifcfg?eth0 /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