Linux基础02
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='qwer', allow_agent=False) # 执行命令 # stdin, stdout, stderr = ssh.exec_command('ls /home/') # 一个用户名 stdin, stdout, stderr = ssh.exec_command('ls') """ stdin 输入的内容 stdout 输出的内容 stderr 错误的内容 """ # 获取结果 res = stdout.read() # 基于网络传输,返回值是一个bytes类型 print(res.decode('utf-8')) # 断开链接 ssh.close()
公钥与私钥

# 公钥和私钥 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='qwer') sftp = paramiko.SFTPClient.from_transport(transport) # 上传文件 # sftp.put("hahaha.txt", '/home/temp.txt') # 注意上传文件到远程某个文件下 文件必须存在 # 下载文件 sftp.get('/home/temp.txt', 'down_hahaha.txt') # 将远程文件下载到本地并重新命令 with open('down_hahaha.txt', 'r') as f: res = f.read() print(res) 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) # 将test_ssh.py上传至服务器/tmp/test.py # sftp.put('test_ssh.py', '/tmp/test.py') # 将/tmp/test.py下载到本地001.py sftp.get('/tmp/test.py', '001.py') transport.close()
SSHProxy相关

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() # 自动执行open方法 return self def __exit__(self, exc_type, exc_val, exc_tb): print('with结束') self.close() # 自动执行close方法 if __name__ == '__main__': # obj = SSHProxy(hostname='10.0.0.200', port=22, username='root', password='qwer') # obj.open() # print(obj.command('ls')) # b'anaconda-ks.cfg\na.txt\na.txt.bak\n' # obj.upload(r'hahaha.txt', '/home/xixixi.txt') # obj.close() with SSHProxy(hostname='10.0.0.200', port=22, username='root', password='qwer') as obj: print(obj.command('ip a')) obj.upload(r'hahaha.txt', '/home/xixixi.txt')
网卡文件及克隆操作
网卡文件基本信息

# 查看⽹卡配置⽂件 cat /etc/sysconfig/network-scripts/ifcfg-eth0 # 编辑⽹卡⽂件时可以先提前备份⼀份 cp /etc/sysconfig/network-scripts/ifcfg-eth0 /tmp/ifcfg-eth0.bak 提示:'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 域名解析服务
DNS服务设置方法

⽅法⼀:设置为阿⾥云dns服务器地址 223.5.5.5 223.6.6.6 ⽅法⼆:通⽤dns服务器地址 114.114.114.114 114.114.114.119 ⽅法三:⾕歌dns服务器 8.8.8.8 ⽅法四:使⽤⽹关地址充当dns服务器地址 10.0.0.254
网卡域名解析配置文件

# 查看配置⽂件 cat /etc/resolv.conf vi /etc/resolv.conf nameserver 114.114.114.114 nameserver 223.5.5.5 提示: 配置完成,⽴即⽣效 ⽹卡的dns配置优先于resolv.conf⽂件中的配置
主机名称配置文件

centos6 /etc/sysconfig/network 主机名称配置⽂件 centos7 /etc/hostname 主机名称配置⽂件 修改主机名称 第⼀个⾥程:利⽤命令修改主机名称 # 临时修改 hostname myhost001 ps:修改完成,需要重新连接,才能命令⽣效 第⼆个⾥程:编辑修改配置⽂件 # 永久修改 vi /etc/hostname centos7有特殊修改主机名称⽅式 hostnamectl set-hostname myhost002
文件编辑异常情况

cat .xixixi.txt.swap # cat: .xixixi.txt.swap: No such file or directory vim -r xixixi.txt
linux系统目录结构
etc常见文件
filesystem table 系统挂载信息表

/etc/fstab 磁盘 --- 分区格式化 --- 系统中可以看到磁盘设备 --- 挂载 提示:所有存储设备必须挂载才能使⽤ 临时挂载:mount /dev/cdrom /mnt 永久挂载:修改⼀个和开机⾃动挂载相关的配置⽂件 /etc/fstab 设备⽂件 挂载点 /dev/第⼀个分区 : /boot /dev/第⼆个分区 : swap /dev/第三个分区 : / cat /etc/fstab # 查看⽂件内容 blkid # 查看磁盘分区 总结:实现磁盘存储设备,挂载操作永久⽣效,开机⾃动加载挂载信息
linux系统命令操作信息

/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)重启系统进⾏确认
系统启动运行级别

/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 修改了级别
配置环境变量信息或者别名信息文件

/etc/profile 环境变量特征 01. 环境变量都⽤⼤写字⺟表示 02. 环境变量可以被所有⽤户使⽤ 03. 环境⼀般是系统安装就已经设置 # 第⼀个⾥程:定义变量 [root@myhost ~]# name='hello' # 第⼆个⾥程:调取变量信息 [root@myhost ~]# echo $name # 第三个⾥程:调整变量值信息 [root@myhost ~]# name='world' [root@myhost ~]# echo $name
专门用于设置别名信息

/etc/bashrc 别名使复杂命令简单化 [root@myhost ~]# ls -l /etc/hosts -rw-r--r--. 1 root root 181 Dec 7 12:28 /etc/hosts [root@myhost ~]# 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 家规
用户登陆系统之后提示信息

/etc/motd 经典案例 _ooOoo_ o8888888o 88" . "88 (| -_- |) O\ = /O ____/`---'\____ .' \\| |// `. / \\||| : |||// \ / _||||| -:- |||||- \ | | \\\ - /// | | | \_| ''\---/'' | | \ .-\__ `-` ___/-. / ___`. .' /--.--\ `. . __ ."" '< `.___\_<|>_/___.' >'"". | | : `- \`.;`\ _ /`;.`/ - ` : | | \ \ `-. \_ __\ /__ _/ .-` / / ======`-.____`-.___\_____/___.-`____.-'====== `=---=' ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 佛祖保佑 永不宕机
⽤户登陆系统之前提示信息

/etc/issue /etc/issue.net [root@myhost ~]# cat /etc/issue [root@myhost ~]# echo > /etc/issue [root@myhost ~]# echo > /etc/issue.net usr⽬录下重要的数据⽂件 [root@myhost ~]# cat /etc/issue
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?