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 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
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
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· winform 绘制太阳,地球,月球 运作规律
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人