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
Pythonparamiko 模块远程执行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是其中一个开源实现,paramikoPython的一个库,实现了SSHv2协议(底层使用cryptography)。 ssh是一个协议,OpenSSH是其中一个开源实现,paramikoPython的一个库,实现了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 creatSShConnectOb(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