SSH(Secure Shell)是一种网络安全协议,能够使两台计算机安全地通信和共享数据。目前,SSH协议已在世界各地广泛使用,大多数设备都支持SSH功能。SSH的进一步说明见:深入了解SSH。SSH作为一种协议,存在多种实现,既有商业实现,也有开源实现。OpenSSH是一种流行的SSH协议开源实现,它提供了服务端后台程序和客户端工具,以在远程控制和文件传输期间加密数据。OpenSSH服务端程序一般开发者用不到,OpenSSH提供了以下工具:

  • 通过ssh,scp和sftp完成远程操作
  • 通过ssh-add,ssh-keysign,ssh-keyscan和ssh-keygen进行密钥管理
  • 服务端由sshd,sftp-server和ssh-agent组成

Paramiko是SSHv2协议的Python实现,我们可以在Python代码中直接使用SSH协议对远程服务器执行操作,而不是像OpenSSH通过ssh命令对远程服务器进行操作。Paramiko官方仓库见:paramiko。Paramiko支持Python2.7或者Python3.7版本及以上,安装命令如下:

pip install paramiko

1 Paramiko使用

1.1 Paramiko介绍

Paramiko提供了实现SSHv2服务端和客户端的核心组件,本文主要介绍在linux下Paramiko客户端连接代码的使用,Paramiko客户端代码包括两个核心类:

  • SSHClient实现了OpenSSH中ssh命令所包含的功能,用于远程连接服务器。
  • SFTPClient实现了OpenSSH中sftp命令所包含的功能,用于远程操作文件。

Paramiko没有提供scp命令的相关功能,scp和sftp功能类似,都是用于远程操作文件。不同的地方在于scp是轻量级的,scp传输速度通常比sftp快,但是sftp提供了断点续传功能。scp与sftp详细比较见:SCP or SFTP

1.2 SSHClient使用

1.2.1 接口介绍

SSHClient提供以下常用方法:

# 连接远程服务器
def connect(
self,
hostname, # 远程服务器地址,必须
port=22, # 远程服务器端口
username=None, # 用户名
password=None, # 密码
pkey=None, # 用于身份验证的私钥
key_filename=None, # 私钥文件
timeout=None, # 超时时间/s
)
# 加载主机密钥
def load_system_host_keys(self, filename=None)
# 在远程服务器上执行命令
# 返回标准输入stdin,标准输出stdout和标准错误stderr
# 每个exec_command都是单独作用的,先调用的命令不会影响后面命令的结果
def exec_command(
self,
command, # 要执行的命令
timeout=None, # 超时时间/s
)
# 关闭连接
def close(self)
# 在当前ssh连接上,创建一个sftp会话
# 返回SFTPClient对象
def open_sftp(self)

1.2.2 应用实例

下面例子展示了通过Paramiko在远程主机上执行命令。在Paramiko中,要注意的是SSHClient每条cmd命令是单独作用的,前一条cmd命令的执行不会影响后一条命令的结果。关于Paramiko私钥使用见paramiko模块介绍及使用

import paramiko

# 服务器地址
hostname = '114.114.114.114'
port = 22 username = 'admin'
password = '123456'
# 超时时间/s
timeout = 2
# 每条cmd命令都是单独作用的
# 进入data文件夹,并打印该目录下的文件信息
cmd = 'cd data && ls -l' # 实例化SSHClient
client = paramiko.SSHClient()
# 加载系统主机密钥,需要在连接服务器前执行该命令
client.load_system_host_keys()
# 连接服务器
client.connect(hostname, port, username, password, timeout=timeout) # 执行命令获得结果
(stdin, stdout, stderr) = client.exec_command(cmd) output = stdout.readlines()
# 打印结果
for line in output:
print(line.strip()) # 关闭连接
client.close()

1.3 SFTPClient使用

1.3.1 接口介绍

SFTPClient提供以下常用方法:

# --- 所有的命令都对应于linux命令
# 关闭连接
def close(self)
# 列出path路径下所有目录文件的名字,相当于执行ls
def listdir(self, path=".")
# 列出path路径下所有目录文件的信息,相当于执行ls -l
def listdir_attr(self, path=".")
# 以mode形式打开远程服务器上某个文件
def open(self, filename, mode="r")
# 删除path文件,path只能是文件
def remove(self, path)
# 将目录或文件从oldpath移动到newpath
def rename(self, oldpath, newpath)
# 创建path目录
def mkdir(self, path)
# 删除空目录path
def rmdir(self, path)
# 返回文件状态
def stat(self, path)
# 创建符号连接
def symlink(self, source, dest)
# 修改文件或目录权限
def chmod(self, path, mode)
# 修改文件拥有者
def chown(self, path, uid, gid)
# 将文件设置为指定大小,类似linux truncate命令
def truncate(self, path, size)
# 返回path的完整路径
def normalize(self, path)
# 将工作路径改为path,该命令会影响SFTPClient的其他命令
def chdir(self, path=None)
# 获得当前工作路径,如果没有调用过chdir函数,则返回None
def getcwd()
# 将本地单个文件上传到服务器
def put(self, localpath, remotepath)
# 将服务器单个文件下载到本地
def get(self, remotepath, localpath)

1.3.2 应用实例

下面例子展示了通过Paramiko连接远程主机,然后通过SFTPClient管理文件。在Paramiko中,SFTPClient不同于SSHClient,SFTPClient各条命令会互相作用。

import paramiko

# 服务器地址
hostname = '114.114.114.114'
port = 22 username = 'admin'
password = '123456'
# 超时时间/s
timeout = 2 # 使用with关键字就不需要主动close了
with paramiko.SSHClient() as client: client.load_system_host_keys()
client.connect(hostname, port, username, password,timeout=timeout)
# 打开sftp连接
sftp_client = client.open_sftp()
# 改变工作目录为'data'
sftp_client.chdir('data')
# 查看data目录下所有文件
contents = sftp_client.listdir() for line in contents:
print(line)
# 获得get.py的实际路径
remote_path = sftp_client.normalize('get.py')
# 将remote_path下载到本地,并存为data.txt
output_file = 'data.txt'
# get和put函数只能对单个文件操作,如果是目录,可以用循环的方式依次处理。
sftp_client.get(remote_path, output_file)

2 参考

[python] 基于paramiko库操作远程服务器的更多相关文章

  1. paramiko模块(基于SSH用于连接远程服务器)

    paramiko模块,基于SSH用于连接远程服务器并执行相关操作 class SSHConnection(object): def __init__(self, host_dict): self.ho ...

  2. Python 3 mysql 库操作

    Python 3 mysql 库操作 一.基础相关知识 MySQL数据库基本操作知识储备 数据库服务器:一台计算机(对内存要求比较高) 数据库管理系统:如mysql,是一个软件 数据库:oldboy_ ...

  3. Python操作远程服务器paramiko模块介绍

    paramiko模块是基于Python实现的SSH远程安全连接,可以提供在远程服务器上执行命令.上传文件到服务器或者从指定服务器下载文件的功能. paramiko模块安装方法 paramiko模块不是 ...

  4. python websocket网页实时显示远程服务器日志信息

    功能:用websocket技术,在运维工具的浏览器上实时显示远程服务器上的日志信息 一般我们在运维工具部署环境的时候,需要实时展现部署过程中的信息,或者在浏览器中实时显示程序日志给开发人员看.你还在用 ...

  5. 运维开发:python websocket网页实时显示远程服务器日志信息

    功能:用websocket技术,在运维工具的浏览器上实时显示远程服务器上的日志信息 一般我们在运维工具部署环境的时候,需要实时展现部署过程中的信息,或者在浏览器中实时显示程序日志给开发人员看.你还在用 ...

  6. Python使用paramiko库远程安全连接SSH

    #!/usr/bin/python #ssh import paramiko import sys,os host='127.0.0.1' user = 'whl' password = ' s = ...

  7. Python--paramiko库:连接远程服务器操作文件

    import paramikofrom loggingutils.mylogger import logger as log class SSHConnection(object): def __in ...

  8. ansible操作远程服务器报Error: ansible requires the stdlib json or simplejson module, neither was found!

    通过ansible执行远程命令时报如下异常: Error: ansible requires the stdlib json or simplejson module, neither was fou ...

  9. Python - 通过PyYaml库操作YAML文件

    PyYaml简单介绍 Python的PyYAML模块是Python的YAML解析器和生成器 它有个版本分水岭,就是5.1 读取YAML5.1之前的读取方法 def read_yaml(self, pa ...

  10. 通过Python的JIRA库操作JIRA

    [本文出自天外归云的博客园] 前提 需要安装jira库: pip install jira 编写脚本 例如,我想统计一下某一jira的备注里是否有如下信息,没有则给予提示: [产品需求文档地址]:ht ...

随机推荐

  1. 【强烈推荐】用glob库的一行命令显著加速批量读取处理数据

    在我们气象领域,对数据进行批处理随处可见,尤其是在处理模式数据的时候.为了能让这个过程加速,很多大佬们提出了不同的方法,比如使用numba库进行计算.使用dask库进行并行等等,都是非常好的加速手段. ...

  2. 浅尝 ECDHE 协议流程

    前言 ECDHE 我之前是听都没听过, 但是新业务需要对前后端通信进行加密, 经过大佬推荐才知道有这个东西, 经过几天的学习和踩坑, 才大致明白其流程和使用方式. 过程坎坷, 好在最后还是成功运用到了 ...

  3. Microsoft Office for Mac最新版本安装教程,亲测可用!!!

    办公必备的Office工具,它为需要使用 Office 工具的用户和企业设计,让他们可以利用功能强大的 Outlook 来处理电子邮件.日历和通讯录事宜.你所熟知和信赖的 Office 经过更新后,可 ...

  4. ssh登录提示hosts is down

    其他无用的网卡配置信息mv走重启network如果还是不行重启一下服务器问题就能解决

  5. 深度剖析Java的volatile实现原理,再也不怕面试官问了

    上篇文章我们讲了synchronized的用法和实现原理,我们总爱说synchronized是重量级锁,volatile是轻量级锁.为什么volatile是轻量级锁,体现在哪些方面?以及volatil ...

  6. ThreadPoolExecutor BlockingQueue讲解

    有四种常用阻塞队列策略: 1.直接拒绝:(Direct Handoffs) 一个好的工作队列应该是不缓存任务,而是直接交给线程处理,就如SynchronousQueue一样.一个任务将会入队失败,如果 ...

  7. Python基础之函数:4、二分法、三元表达式、生成/推导式、匿名函数、内置函数

    目录 一.算法简介之二分法 1.什么是算法 2.算法的应用场景 3.二分法 二.三元表达式 1.简介及用法 三.各种生成式 1.列表生成式 2.字典生成式 3.集合生成式 四.匿名函数 五.常见内置函 ...

  8. 小菜鸡学习---<正则表达式学习笔记2>

    正则表达式学习笔记2 一.修饰符 前面我们学习的都是用于匹配的基本的关键的一些表达式符号,现在我们来学习修饰符.修饰符不写在正则表达式里,修饰符位于表达式之外,比如/runoob/g,这个最后的g就是 ...

  9. 使用Jupyter记事本记录和制作.NET可视化笔记

    前言:对于记录笔记的工具特别多,不过对于程序员来说,记录笔记+程序代码+运行结果演示可以同时存在,无疑会极大增加我们的笔记的可读性和体验感.以前在写python的时候,使用jupyter的体验很好,所 ...

  10. Nginx如何配置隐藏index.php文件

    server { listen 80; #listen [::]:80 default_server ipv6only=on; server_name jiqing.dexin.com; index ...