paramiko是一个SSHv2协议的python实现,提供客户端和服务器的功能。paramiko可以通过ssh协议执行远程主机的程序或脚本,获取输出结果和返回值,使用起来简介优雅。
安装方式:
pip3 install paramiko
客户端:win10
服务端:linux服务器,ip:192.168.41.222
paramiko有两个核心模块:
SSHClient
和
SFTPClient
SSHClient
:通过ssh协议和linux服务器建立连接执行命令,该类封装了传输(Transport),通道(Channel)及SFTPClient建立的方法(open_sftp)
SFTPClient:
作用类似与Linux的sftp命令,是对SFTP客户端的封装,用以实现远程文件操作,如文件上传、下载、修改文件权限等操作。
Channel:是一种类Socket,一种安全的SSH传输通道;
Transport:是一种加密的会话,使用时会同步创建了一个加密的Tunnels(通道),这个Tunnels叫做Channel;
Session:是client与Server保持连接的对象,用connect()
/
start_client()
/
start_server()开始会话。
1. SSHClient方式连接服务器
功能:初始化一个SSHClient类的实例,调用connect连接服务器,调用exec_command方法执行命令:echo `date` && df -hl,关闭连接
代码实现:
import paramiko
# 建立一个sshclient对象
ssh = paramiko.SSHClient()
# 将信任的主机自动加入到host_allow列表,须放在connect方法前面
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
# 调用connect方法连接服务器
ssh.connect(hostname="192.168.41.222", port=22, username="root", password="root")
# 执行命令
stdin, stdout, stderr = ssh.exec_command("echo `date` && df -hl")
# 结果放到stdout中,如果有错误将放到stderr中
print(stdout.read().decode('utf-8'))
# recv_exit_status方法会一直阻塞直到命令执行完成
returncode = stdout.channel.recv_exit_status()
print("returncode:",returncode)
# 关闭连接
ssh.close()
Thu Apr 29 22:07:24 CST 2021
Filesystem Size Used Avail Use% Mounted on
devtmpfs 1.9G 0 1.9G 0% /dev
tmpfs 1.9G 0 1.9G 0% /dev/shm
tmpfs 1.9G 12M 1.9G 1% /run
tmpfs 1.9G 0 1.9G 0% /sys/fs/cgroup
/dev/mapper/centos-root 20G 13G 7.5G 63% /
/dev/sda1 197M 129M 69M 66% /boot
tmpfs 378M 0 378M 0% /run/user/0
returncode: 0
recv_exit_status()方法说明:用来判断命令是否执行完成,当exec_command命令没有执行完成时,这个方法会一直阻塞。如果exec_command运行结束,则会返回0表示执行成功。-1表示执行失败。
SSHClient 封装 Transport
代码实现:
import paramiko
# 创建一个通道
transport = paramiko.Transport(('196.168.41.222', 22))
transport.connect(username='root', password='root')
ssh = paramiko.SSHClient()
ssh._transport = transport
stdin, stdout, stderr = ssh.exec_command('df -h')
print(stdout.read().decode('utf-8'))
transport.close()
2. SFTPClient方式登录并实现上传与下载
功能描述:从win10主机上传文件01.txt到远程服务器上
代码实现:
import paramiko
trans = paramiko.Transport(('192.168.41.222', 22))
# 建立连接,指定SSHClient的_transport
trans.connect(username='root', password='root')
ssh = paramiko.SSHClient()
ssh._transport = trans
# 执行命令,和传统方法一样
stdin, stdout, stderr = ssh.exec_command('echo `date` && df -hl')
print(stdout.read().decode('utf-8'))
# 实例化一个 sftp对象,指定连接的通道
sftp = paramiko.SFTPClient.from_transport(trans)
#或者调用ope_sftp()方法
#sftp = ssh_client.open_sftp()
# 发送文件
sftp.put(localpath='./01.txt',
remotepath='/tmp/01.txt')
# 下载文件
# sftp.get(localpath='./01.txt',
# remotepath='/tmp/01.txt')
stdin, stdout, stderr = ssh.exec_command('ls -ltr /tmp')
print(stdout.read().decode('utf-8'))
# 关闭连接
trans.close()
Thu Apr 29 22:13:43 CST 2021
Filesystem Size Used Avail Use% Mounted on
devtmpfs 1.9G 0 1.9G 0% /dev
tmpfs 1.9G 0 1.9G 0% /dev/shm
tmpfs 1.9G 12M 1.9G 1% /run
tmpfs 1.9G 0 1.9G 0% /sys/fs/cgroup
/dev/mapper/centos-root 20G 13G 7.5G 63% /
/dev/sda1 197M 129M 69M 66% /boot
tmpfs 378M 0 378M 0% /run/user/0
total 4
drwx------ 2 root root 6 Apr 21 23:06 vmware-root_1089-4013330115
drwx------ 2 root root 6 Apr 29 21:23 vmware-root_1090-2688554143
-rw-r--r-- 1 root root 3 Apr 29 22:13 01.txt
参考:https://www.cnblogs.com/xiao-apple36/p/9144092.html
paramiko是一个SSHv2协议的python实现,提供客户端和服务器的功能。paramiko可以通过ssh协议执行远程主机的程序或脚本,获取输出结果和返回值,使用起来简介优雅。安装方式:pip3 install paramiko1. 基于用户名和密码的SSHClient方式登录编程步骤如下:(1)初始化一个SSHClient类的实例(2)调用connect方法连接远程主机(3)执行命令获取输出和返回值,关闭连接代码实现:import paramiko# 建立一个s
Python – paramiko 模块远程执行ssh 命令 nohup 不生效的问题解决
1、使用 paramiko 模块ssh 登陆到 linux 执行nohup命令不生效
# 执行命令
def command(ssh_config, cmd, result_print=None, nohup=False):
ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect(hostname=ssh_config.hostname, port=ssh
# 初始化连接创建Transport通道
def __init__(self, host=hostname, port=int(port), user='root', pwd="Alibaba%1688"):
self.host = host
self.port = port
self.user = user
self.pwd = pwd
self.__transp..
https://developer.51cto.com/art/201910/604700.htm
详解Python远程控制模块:Paramiko概念、方法及七大案例
ssh是一个协议,OpenSSH是其中一个开源实现,paramiko是Python的一个库,实现了SSHv2协议(底层使用cryptography)。
ssh是一个协议,OpenSSH是其中一个开源实现,paramiko是Python的一个库,实现了SSHv2协议(底层使用cryptography)。
有了Paramiko以后,我们就可以在P
最近在学习《
python 自动化运维》 一书,书中提到使用
paramiko的send和
recv来进行
远程ssh的命令输入和结果获取,我也尝试使用了下。
开始在连接connect 目标host和port后准备按照书中所说连接堡垒机
channel.send(‘
ssh ’ +…………………………….)
准备输入密码
while not buff.endswith(“password: “)
一、exec_command
exec_command使用的是SSH exec channel的方式执行,不具备持久化的能力,也就是每次运行都是一次全新的环境,不是说你先切换到root,下一条命令运行就是以root执行了,说简单点就是把命令当作参数发送出去,如:
ssh user@host 命令
适合场景:不想使用终端仿真;不执行诸如分页,着色和主要是交互式确认之类的操作,有一个典型的坑,不能使用nohup
实现方式:
import paramiko
ssh = paramiko.SSHClient()
import
paramiko
import time
def creat
SShConnectOb(hostname, username, password, port=22):
ssh =
paramiko.
SSHClient()
ssh.set_missing_host_key_policy(
paramiko.AutoAddPolicy())
ssh.
paramiko模块exec_command()函数是将服务器执行完的结果一次性返回给你;
invoke_shell()函数类似shell终端,可以将执行结果分批次返回,看到任务的执行情况,不会因为执行一个很长的脚本而不知道是否执行成功
exec_command():
invoke_shell()
class TerminalSsh(object):
def __init__(self, host=None, port=None, username=None, password=None):
self.host = host
self.port = port
self.username = username
self.password = password
ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect('example.com', username='user', password='password')
stdin, stdout, stderr = ssh.exec_command('ls -l')
for line in stdout:
print(line.strip())
ssh.close()
这个脚本连接到远程服务器 example.com,使用给定的用户名和密码进行身份验证,然后执行 `ls -l` 命令并将输出打印到控制台。你可以修改此代码以执行任何命令。请注意,这需要 paramiko 模块的安装。
所以新手使用celery很仔细的建立文件夹名字、文件夹层级、python文件名字。
所以网上的celery博客教程虽然很多,但是并不能学会使用,因为要运行起来需要以下6个方面都掌握好,博客文字很难表达清楚或者没有写全面以下6个方面。
celery消费任务不执行或者报错NotRegistered,与很多方面有关系,如果要别人排错,至少要发以下6方面的截图,因为与一下6点关系很大。
1)整个项目目录结构, 2)@task入参 ,3)celery的配置,4)celery的配置 include ,5)cmd命令行启动参数 --queues= 的值,6)用户在启动cmd命令行时候,用户所在的文件夹。
在不规范的文件夹路径下,使用celery难度很高,一般教程都没教。
[项目文件夹目录格式不规范下的celery使用演示](https://github.com/ydf0509/celery_demo) 。
此国产分布式函数调度框架 funboost python万能通用函数加速器 https://funboost.readthedocs.io/ ,
从用法调用难度,用户所需代码量,超高并发性能,qps控频精确程度,支持的中间件类型,任务控制方式,稳定程度等19个方面全方位超过celery。发布性能提高1000%,消费性能提高2000%。
python万能分布式函数调度框架funboost支持python所有类型的并发模式和一切知名消息队列中间件,python函数加速器,框架包罗万象,一统编程思维,与业务不绑定,适用范围广。
pip install funboost