def PutCallback(self,TransferredSize, ToBeTransferred):
rate = int(TransferredSize * 100 / ToBeTransferred)
if rate > self.percent + 5:
self.percent = rate
三、执行指令持续输出
https://stackoverflow.com/questions/25260088/paramiko-with-continuous-stdout
stdin, stdout, stderr = client.exec_command(str_command) #str_command为需要执行的指令
for l in self.line_buffered(stdout): #stdout为持续输出的结果,l为结果的每一行。如果行中包含update_prog_percent则输出给界面显示
if "update_prog_percent" in l:
self.MsgSigOut.emit(addr + l, 1)
self.log.info(addr + l)
def line_buffered(self, f): #每读取一行执行结果就输出一行
line_buf = ""
while not f.channel.exit_status_ready():
line_buf += f.read(1).decode('utf8')
if line_buf.endswith('\n'):
yield line_buf
line_buf = ''
四、Client、Channel、Transport的关系
SSHClient表示与SSH server会话的高层表示,封装了Transport、Channel和SFTPClient。在SSHClient源代码中可以看到其包含了一个transport作为私有变量,通过transport创建出channel后在channel执行exec_command和invoke_shell。
Transport像一个流而不是像socket,它协商了加密会话,鉴权并创建了流的隧道控制,也即channel。许多的channel通过一个会话复用。(通常在端口转发(port forwarding)模式下)。
端口转发(port forwarding)原理见下文:
https://www.cnblogs.com/kidsitcn/p/11090252.html
一个Channel与一个socket类似,其API与Python socket API完全一致。SSH2有一个类似滑动窗口的流控机制,如果客户端停止从Channel读取,并且Channel的buffer满了,则服务器不能再向客户端发送数据直到客户端读取了数据。(这不会影响同一个transport下面其他channel的流控,同一个transport下面的channel都是独立进行流控的)。类似的,如果服务器不及时读取客户端发送的数据,客户端发送数据将会出现阻塞,除非客户端设置了超时机制。
exec_command在服务器执行命令,如果服务器允许执行,命令执行后channel立即连接到stdin、stdout和stderr。
exec_command命令执行完后,channel会关闭并且不再使用,如果要执行其他命令需要重新打开一个channel。
invoke_shell在channel上获取一个交互式shell会话。如果服务器允许,channel将连接到stdin、stdout和stderr。
在invoke_shell之前一般需要调用get_pty创建伪终端,channel连接到伪终端的stdin、stdout和stderr。
当shell退出时,channel会关闭并且不再被使用。如果想打开领一个shell需要打开一个新的channel。
get_pty从服务器获取一个伪终端,这通常在创建client channel之后,请求服务器为invoke_shell创建的shell提供服务。如果只是通过exec_command执行单个指令则不需要调用该方法。
Paramiko官网文档链接: http://docs.paramiko.org/en/stable/一、执行指令路径exec_command是在登录时默认路径下执行命令,且每次执行都是在登录时的默认路径下执行命令,即使执行了client.exec_command('cd XXX'),再执行下一条指令时,仍然在登录时的默认路径。要规避该问题有三种方法1、每次与路径相关的指令用绝对路...
#使用Ansible编排业务流程
目前,运行此存储库的唯一方法是启动无所事事的实例以对其进行测试。 剧本设置了一个Puppet Enterprise主服务器和两个代理。
要求:在使用此之前,您将需要 。 还需要Virtualbox和Vagrant。
##流浪者测试
### 1。 克隆此仓库
### 2。 cd puppet-ansible && vagrant up
### 3。 使用ansible设置ssh密钥可以使事情变得更容易:
ansible-playbook -c paramiko -i setup/hosts setup/setup.yml --ask-pass --sudo
注意:如果您破坏无用的实例,重新创建它们,然后重新运行此剧本,除非从便携式计算机的已知主机文件中删除无用的IP地址,否则您将收到错误消息。
系统将提示您输入密码。 这是“无聊的”。 然后,系统
第一步是配置.env文件,这个项目的一些组件使用的信息应该在那里。 查看必须配置的内容:
KEY_NAME =seu@email.net
AWS_ACCESS_KEY =access_key
AWS_SECRET_KEY =secret_key
KEY_PASS =key_pass
REGION =us-east-1
DEFAULT_INSTANCE_ID =ami-9eaa1cf6
INSTANCE_SIZE =m3.medium
DEFAULT_SECURITY_GROUP =default
SSH_USER =ubuntu
PARAMIKO_DEBUG =True
如何安装线声和声应用程序
注意:对于线索同步服务器,请
使用Pardus-19.2-SERVER版本。 您可以从下载Pardus 19.2版本。 将服务器语言设置为英语。
以下命令按顺序写在终端中。
sudo apt-get install python3-
paramiko python3-pyqt5 python3-mysql.connector python3-psutil xterm
下载应用程序
下载Lider Ahenk安装应用程序;
sudo apt-get install git
git软件包随命令一起安装。
git clone https://github.com/Pardus-LiderAhenk/lider-ahenk-installer.git
用命令Lider Harmony Installation Application下载。
运行应用程序
paramiko 执行多条语句或执行sudo命令时,须要在exec_command加上get_pty=True。
在远程执行某些命令时,可能需要管理员权限,这种时候需要做一些判断,首先判断登录提供的用户名如果不是root,则需要对命令做一些修改。这里的修改有两种情况,一是,该普通用户本身就有sudo权限,只需要把执行的命令加到sudo之后执行就可以,还有一种是普通用户没有sudo权限,需要通过su先切换到root身份之后再执行,这种情况下需要提供root密码。
还有一点要注意的是get_pty这个参数,实际
vyos_cfg_v2是的新闪亮版本。 主要区别是使用的“后端”。 在VYOS_CFG的情况下,它是很好的旧paramiko,VYOS_CFG_V2改用VYOS_API。
请注意,您目前需要使用VyOS滚动版本来获得API支持。
vyos_cfg.py
一个简单的脚本,用于将配置推送到两个或多个VyOS实例。 它可以使用API将预定义的命令列表发送到设备。 您可以使用YAML语法指定逻辑以支持不同的方案(例如,部署前检查,部署,部署后活动)。
├── deployment.yaml YAML file with deployment logic
├── helpers.py Just a bunch of functions
├── inventory.yaml Use this to
如果管理网络设备很多,不可能靠人力每天去登录设备去查看是否在线。所以,可以利用python脚本通过每天扫描网络中的在线设备。可以部署在服务器上做成定时任务,每天发送AAA巡检报告。
下面是我写的一个python练手小程序。用来扫描一个网段中的在线主机,并尝试AAA去登录。统计一个大网段内可以成功aaa登录的主机。
该程序只是测试小程序,还有些小bug需要解决。不是通用的程序。主要提供一个大致思路。
主要用到了python-nmap, paramiko库。
程序大概思路:
利用nmap扫描一个指定网段,只做ping扫描,所以前提所管理的设备中ping必须开启。获取存活设备IP列表。
rcontrol是基于的
paramiko旨在工作,通过SSH远程机器上一个Python库。
与fabric不同,它旨在以异步方式执行任务,并与 python >= 2.7 (包括python 3 )一起工作。
请
注意,这正在开发中! 我正在等待反馈、想法和贡献者来使这个工具发展。
基本示例:
from rcontrol . ssh import SshSession , ssh_client
from rcontrol . core import SessionManager
def log ( task , line ):
print ( "%r: %s" % ( task , line ))
with SessionManager () as sessions :
# create sessions on two hosts
sessions
opsmonitor是一个简单的服务器监控系统,本项目fork于flask-adminlte-handler
开发opsmonitor的原因是,现有的开源监控服务如:nagios、cacti等,配置繁琐、安装复杂;
开发这个系统的目的就是为了解决繁琐的配置问题,opsmonitor主体功能现都已完成,可以满足基本
的监控需求。
opsmonitor只适用于小型系统的监控,目前的opsmonitor对于监控项目过多的系统
会有性能问题,建议监控主机数少于20台,并且监控项数据少于100个。
本系统用户管理界面的switch开关不起作用
使用的技术
Web框架使用Flask,默认Jinja模版
ORM框架使用Peewee
前端套用基于BootStrap的AdminLTE模板,也使用了少量的layui
使用paramiko通过ssh通道获取主机硬件信息
本文实例讲述了python下paramiko模块实现ssh连接登录Linux服务器的方法。分享给大家供大家参考。具体分析如下:
python下有个paramiko模块,这个模块可以实现ssh登录linux服务器,下面贴出代码,注意,我在centos5.6下,python2.6.5,paramiko-1.7的版本下测试成功。
#!/usr/bin/env python
import paramiko\nhostname='172.28.102.249'\nusername='root'\npassword='toor'
if __name__=='__main__':
paramiko.util
最近在学习《python 自动化运维》 一书,书中提到
使用paramiko的send和recv来进行远程ssh的命令输入和结果获取,我也尝试
使用了下。
开始在连接connect 目标host和port后准备按照书中所说连接堡垒机
channel.send(‘ssh ’ +…………………………….)
准备输入密码
while not buff.endswith(“password: “)
Paramiko是一个基于Python的SSH2协议库,用于在Python编写的程序中连接到远程服务器并执行命令。使用Paramiko可以轻松创建SSH连接,通过SSH在远程主机上执行命令、上传和下载文件等操作。
如果没有网络,可以使用Paramiko离线包。Paramiko离线包是将Paramiko库的所有依赖项打包到一个压缩文件中,这个压缩文件可以在没有网络的情况下进行离线安装。Paramiko离线包的安装方式与在线安装相同。
使用Paramiko离线包的步骤如下:
1.下载Paramiko离线包并解压缩;
2.将解压后的文件夹放到要使用的Python环境的site-packages目录下;
3.在Python程序中引入Paramiko模块,就可以开始使用Paramiko库了。
需要注意的是,Paramiko离线包只是解决了没有网络时无法通过PIP在线安装Paramiko库的问题。如果程序需要连接到远程服务器,则仍需确保机器可以访问该服务器。