linux公钥私钥和常见文件
linux公钥私钥和常见文件
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='10.0.0.200', port=22, username='root', password='lsq123')
# 执行命令
# 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
图解公钥与私钥的使用
1、鲍勃有两把钥匙,一把是公钥,另一把是私钥。
2、鲍勃把公钥送给他的朋友们----帕蒂、道格、苏珊----每人一把
3、苏珊要给鲍勃写一封保密的信。她写完后用鲍勃的公钥加密,就可以达到保密的效果
4、鲍勃收信后,用私钥解密,就看到了信件内容。这里要强调的是,只要鲍勃的私钥不泄露,这封信就是安全的,即使落在别人手里,也无法解密。
公钥私钥方式
# 公钥私钥采用方式
1.产生自己的公钥和私钥
2.将你的公钥上传到服务器保存
3.通过私钥来链接
# mac
ssh-keygen -t rsa
ssh-copy-id -i ~/.ssh/id_rea.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(连续按enter)
3.拷贝公钥至远程服务器
ssh-copy-id -i 公钥文件路径 username@hostname
私钥读取
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
# 用户名和密码
transport = paramiko.Transport(('10.0.0.200', 22), )
transport.connect(username='root', password='lsq123')
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\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)
# 将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='lsq123')
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.编辑突然出现中断
2.文件被多个人使用
'总结:出现了隐藏文件 没有及时删除'
# 解决方式
1.删除.txt.swp隐藏文件
rm -rf .aaa.txt.swp
2.vi继续编辑
vim aaa.txt
系统目录结构介绍
# windows
目录结构从 C盘 D盘 开始
# linux
目录结构从 根 开始
# 目录结构特点
linux系统中的目录一切从根开始
linux系统中的目录结构拥有层次
linux系统中的目录需要挂载使用
挂载
'''linux中‘一切皆文件’,所有文件都放置在以根目录为树根的树形目录结构中。在linux看来,任何硬件设备也都是文件,它们各有自己一套文件系统(文件目录结构)'''
# 挂载的概念
当在linux系统中使用这些硬件设备时,只有将linux本身的文件目录与硬件设备的文件目录合二为一,硬件设备才能为我们所用。合二为一的过程简称“挂载”
'''
注:
如果不挂载,通过linux系统中的图形界面系统可以查看找到硬件设备,但命令行方式无法找到
'''
# 挂载:
指的就是将设备文件中的顶级目录链接到linux根目录下的某一目录(最好是空目录),
访问此目录就等同于访问设备文件
# 挂载的命令 : mount
mount [磁盘路径] [挂载的路径]
# 查看本机挂载的命令:
[root@localhost dev]# df -h
# 卸载挂载的磁盘 umount
[root@localhost dev]# umount /mnt/
挂载的操作步骤
步骤1:目前U盘合linux系统文件分属两个文件系统,还无法使用命令行找到U盘文件,需要将两个文件系统进行挂载
.接下来,我们在根目录下新建一个目录/sdb-u,通过挂载命令将U盘文件系统挂载到此目录
'''可以看到U盘文件系统已近成为linux文件系统目录的一部分,此时访问/sdb-u/就等同于访问U盘'''
根目录下的/dev/目录文件负责所有的硬件设备文件,事实上,当U盘插入linux后,系统也确实会给U盘分配一个目录文件(比如 sdb1),就位于/dev/目录下(/dev/sdb1),但无法通过/dev/sdb1/直接访问U盘数据,访问此目录只会提供给您此设备的一些基本信息(比如容量)
1.拥有一个存储设备(光驱)
2.找到相应光驱设备
[root@admin001 ~]# ls /dev/cdrom
/dev/cdrom
[root@admin001 ~]# ls -l /dev/cdrom
lrwxrwxrwx. 1 root root 3 Jun 7 15:16 /dev/cdrom -> sr0
3.进行挂载操作
mount /dev/cdrom /mnt/(挂载点目录一定存在)
4.确认是否挂载成功
ls /mnt
5.取消挂载
umount /mnt
目录结构说明
网卡文件
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 域名解析服务
"""
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
⽹卡域名解析配置⽂件
/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 主机名称配置⽂件
主机名称修改
# 查看自己主机名
[root@admin001 ~]# echo $HOSTNAME
# 主机名存放文件
[root@admin001 ~]# cat /etc/hostname
# 临时修改
hostname [修改名称]
'关机就改回来了 因为没有改配置文件'
# 永久修改
hostnamectl set-hostname [修改名称]
[root@admin001 ~]# vim /etc/hostname # 需要重启生效
[root@admin001 ~]# hostnamectl set-hostname DDD # 立即生效
[root@admin001 ~]# bash 重启
etc常见文件
/etc/fstab
/etc/fstab # filesystem table 系统挂载信息表
磁盘 --- 分区格式化 --- 系统中可以看到磁盘设备 --- 挂载
(开了个⻔)
PS:所有存储设备必须挂载才能使⽤
临时挂载:mount /dev/cdrom /mnt
永久挂载:修改⼀个和开机⾃动挂载相关的配置⽂件 /etc/fstab
设备⽂件 挂载点
/dev/第⼀个分区 : /boot
/dev/第⼆个分区 : swap
/dev/第三个分区 : /
cat /etc/fstab # 查看⽂件内容
blkid # 查看磁盘分区
'总结:实现磁盘存储设备,挂载操作永久⽣效,开机⾃动加载挂载信息'
/etc/rc.local
/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
/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
/etc/profile # 配置环境变量信息或者别名信息⽂件(重要)
'''
环境变量特征
01. 环境变量都⽤⼤写字⺟表示
02. 环境变量可以被所有⽤户所使⽤
03. 环境⼀般是系统安装就已经设置
'''
1.定义变量
[root@jasonNB ~]# oldboy=123
2.调取变量信息
[root@jasonNB ~]# echo $oldboy
3.调整变量值信息
[root@jasonNB ~]# oldboy=456
[root@jasonNB ~]# echo $oldboy
/etc/bashrc
/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 家规
/etc/motd
/etc/motd # ⽤户登陆系统之后提示信息
// _ooOoo_ //
// o8888888o //
// 88" . "88 //
// (| ^_^ |) //
// O\ = /O //
// ____/`---'\____ //
// .' \\| |// `. //
// / \\||| : |||// \ //
// / _||||| -:- |||||- \ //
// | | \\\ - /// | | //
// | \_| ''\---/'' | | //
// \ .-\__ `-` ___/-. / //
// ___`. .' /--.--\ `. . ___ //
// ."" '< `.___\_<|>_/___.' >'"". //
// | | : `- \`.;`\ _ /`;.`/ - ` : | | //
// \ \ `-. \_ __\ /__ _/ .-` / / //
// ========`-.____`-.___\_____/___.-`____.-'======== //
// `=---=' //
// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ //
// 佛祖保佑 永不宕机 永无BUG
/etc/issue
/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 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 【杭电多校比赛记录】2025“钉耙编程”中国大学生算法设计春季联赛(1)