使用Python 远程管理 Linux 系统
Linux 系统的 远程操作
在平时的工作中使用到的一个 Python 小功能;因为在开发代码后需要将代码远程部署到 Linux 系统;代码数量过多,并且有多台新的远程机器需要操作,因此想到的 使用 Python 代码 进行自动远程部署代码,并且对使用环境进行检测是否缺少 某些 Python 的 第三方包。
使用的包:paramiko
;
Linux 连接
# host:ip 地址;
# port:开放的 ssh 端口; (一般 默认为 22)
# userName:用户名
# password:连接密码
# ftp 连接方式 可以用于 传输文件使用
transport = paramiko.Transport(sock=(host, port))
transport.connect(username=userName, password=password)
ftp = paramiko.SFTPClient.from_transport(transport) # 实例
session = transport.open_session()
# ssh 连接方式
ssh = paramiko.SSHClient()
ssh._transport = self.transport
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect(hostname=host, username=userName, password=password, port=port)
session.get_pty()
session.invoke_shell()
以上的 两种 连接方式具备不同的 性质和功能;需要根据不同的应用方式进行选择;
Linux 与 Windows 文件 传输
一、 Windows to Linux:
将本地的 文件 上传到 Linux 系统
# 使用 上述 提到的 ftp 连接方式
sftp = ftp
# localpath 为本地文件的绝对路径。如:D:\test.py
# remotepath 为服务器端存放上传文件的绝对路径,而不是一个目录。如:/tmp/my_file.txt
sftp.put(localpath, remotepath) # 上传 文件 指令
二、 Linux come back Windows:
将 Linux 系统的 文件 下载到本地
# 使用 上述 提到的 ftp 连接方式
sftp = ftp
# localpath 为本地文件的绝对路径。如:D:\test.py
# remotepath 为服务器端存放上传文件的绝对路径,而不是一个目录。如:/tmp/my_file.txt
sftp.get(remotepath, localpath) # 上传 文件 指令
Linux 远程 操作:
一、SSH 的 连接方式:
# 使用 上述的 ssh 连接方式
stdin, stdout, stderr = ssh.exec_command(command)
# 使用的 命令成功 后返回的结果 为:stdout
# 当 Linux 命令 报错时 返回的 命令为: stderr
SSH 的 连接有一定的 缺点;每一次的 操作 都属于 新的 窗口连接
因此使用 连续 命令操作时 使用 \n 对每一条命令进行分割
二、session 的 连接方式:
# 使用 上述的 session 的方式 连接
session.send(b"ls \n") # 使用 时 注意 要用 \n 结尾
# 这个 连接方式 没有返回的 结果内容 想要知道 命令结果 则需要定义一个 buffer
# 将 界面的 内容放置 缓存 实时 反馈查看 方法如下:
def get_buffer(self): # 通过 该函数 持续获取结果 作用与大家打开窗口一样的效果
while True:
buffer = self.session.recv(999999)
print(buffer.decode(errors='ignor'))
if buffer.endswith(b"KeyboardInterrupt"): # 对于需要 结束的 情况 进行判断
return
session 的 连接方式 是可持续连接的;中间不会因为 终端而 无效
比如:使用 tmux 窗口时,需要 连续的操作可以 完成连续操作
总结:
使用 Python 操作 Linux 时需要对 Linux 的命令操作熟悉;
对于 Linux 的 系统结构 熟悉;学习 Linux的基本操作等;
如果 想要 熟悉 Linux 以及需要测试 Python的 远程操作 Linux的 命令;可以下载一个虚拟机 ;装载一个虚拟的 系统环境,比如:kali ,
装好虚拟 Linux 系统后需要开启 Linux 的 SSH 服务才可以使用;
开启 SSH 服务 命令:service ssh start
关闭 SSH 服务 命令:service ssh stop
查看 IP 命令:ifconfig
默认 端口 为:22
用户名和密码:就是登录使用的账号密码
Linux 常用命令:
mv 文件地址 目标移动目录 # 文件移动命令
cd 文件目录 # 切换文件夹
ls 查看所含文件
rm -rf 强删
wget 文件地址 # 下载文件 http
unzip zip文件 # 解压文件
tmux 窗口使用:
下载安装 : sudo yum install tmux
查看存在窗口:tmux ls
重连存在窗口:tmux attach -t 窗口名字
杀死会话
tmux kill-session命令用于杀死某个会话。
# 使用会话编号
$ tmux kill-session -t 0
# 使用会话名称
$ tmux kill-session -t <session-name>
tmux kill-session -all
切换会话。
tmux switch命令用于切换会话。
# 使用会话编号
$ tmux switch -t 0
# 使用会话名称
$ tmux switch -t <session-name>
本文 提到的 Linux 操作命令 不多 ;大家可以自行搜索一下;
通过 Python 的远程操作方式,可以将需要部署的 程序 写成 一个字典、列表或者 Excel 表格;也可以使用 数据库 进行 控制部署
当然远程程序的定时部署还有许多其他的方法可以部署。