python Paramiko使用示例
作者:Starryland 发布时间:2022-08-10 08:23:28
Paramiko 是由 Python 语言编写的一个扩展模块,提供了基于 SSHv2 协议 (包括客户端和服务端)的多种功能实现。通常被用来远程控制类 UNIX 系统。
Paramiko 可以直接使用 pip 命令安装:
$ pip install paramiko
此处不作过多介绍,参考后文中的代码示例。
远程执行 Linux 命令
代码如下:
import paramiko
# 初始化 SSH 客户端,通过用户名密码连接至远程服务器
client = paramiko.SSHClient()
client.set_missing_host_key_policy(paramiko.AutoAddPolicy)
client.connect(hostname='remoteserver_ip', username='username', password='password')
# 通过 RSA 秘钥验证的方式连接至远程 SSH 服务
# private_key = paramiko.RSAKey.from_private_key_file('~/.ssh/id_rsa')
# client.connect(hostname="remoteserver_ip", username="username", pkey=private_key)
# 远程执行 df -h 命令并打印输出
stdin, stdout, stderr = client.exec_command('df -h')
print(stdout.read().decode('utf-8'))
client.close()
运行效果如下:
SFTP 文件传输
示例代码如下:
import paramiko
transport = paramiko.Transport(('hostname_or_ip', port))
# 通过用户名密码完成验证建立连接
transport.connect(username='username', password='password')
# 通过 RSA 私钥文件完成验证建立连接
# private_key = paramiko.RSAKey.from_private_key_file('/path/to/private_key_file')
# transport.connect(username='username', pkey=private_key)
sftp = paramiko.SFTPClient.from_transport(transport)
localpath = "localfile"
remotepath = "remotefile_fullpath"
sftp.put(localpath, remotepath)
print("Successfully uploaded")
transport.close()
综合示例
代码如下(文件名 ssh_connection.py ):
import paramiko
import getpass
import os
class SSHConnection():
def __init__(self, user, host, port=22, password=''):
self.username = user
self.host = host
self.port = port
self.password = password
self.keyfile = self.get_keyfile()
def get_keyfile(self, path=os.getcwd()):
default_keyfile = os.path.join(
os.environ['HOME'], '.ssh', 'id_rsa')
if 'id_rsa' in os.listdir(path):
keyfile = os.path.join(path, 'id_rsa')
elif os.path.isfile(default_keyfile):
keyfile = default_keyfile
else:
keyfile = ''
return keyfile
def connect(self):
transport = paramiko.Transport((self.host, self.port))
if self.password:
transport.connect(username=self.username, password=self.password)
elif self.keyfile:
transport.connect(
username=self.username,
pkey=paramiko.RSAKey.from_private_key_file(self.keyfile))
else:
password = getpass.getpass(
"Password for %s@%s: " % (self.username, self.host))
transport.connect(username=self.username, password=password)
self._transport = transport
print("Connected to %s as %s" % (self.host, self.username))
def close(self):
self._transport.close()
def run_cmd(self, command):
ssh = paramiko.SSHClient()
ssh._transport = self._transport
stdin, stdout, stderr = ssh.exec_command(command)
res = stdout.read().decode('utf-8')
error = stderr.read().decode('utf-8')
if error.strip():
return error
else:
return res
def trans_file(self, localpath, remotepath, method=''):
sftp = paramiko.SFTPClient.from_transport(self._transport)
if method == 'put':
sftp.put(localpath, remotepath)
print("File %s has uploaded to %s" % (localpath, remotepath))
elif method == 'get':
sftp.get(remotepath, localpath)
print("File %s has saved as %s" % (remotepath, localpath))
else:
print('usage: trans_file(localpath, remotepath, method="get/put"')
def __del__(self):
self.close()
测试结果如下:
(python3) D:\Program\python\devops>python
Python 3.7.2 (default, Jan 2 2019, 17:07:39) [MSC v.1915 64 bit (AMD64)] :: Anaconda, Inc. on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> from ssh_connection import SSHConnection
>>> client = SSHConnection('starky','127.0.0.1')
>>> client.connect()
Connected to 127.0.0.1 as starky
>>> client.run_cmd('uname -a')
'Linux server1 5.0.0-20-generic #21-Ubuntu SMP Mon Jun 24 09:32:09 UTC 2019 x86_64 x86_64 x86_64 GNU/Linux\n'
>>> client.trans_file('id_rsa.pub', '/home/starky/id_rsa.pub', method='put')
File id_rsa.pub has uploaded to /home/starky/id_rsa.pub
>>> client.run_cmd('ls -l /home/starky/id_rsa.pub')
'-rw-rw-r-- 1 starky starky 410 7月 20 15:01 /home/starky/id_rsa.pub\n'
>>> exit()
来源:https://rollingstarky.github.io/2019/07/20/paramiko-examples/?utm_source=tuicool&utm_medium=referral
猜你喜欢
- 目录json支持的格式:代码操作1.json转化为python2. python序列化为json总结json转化为python表示反序列化p
- Python 常用 PEP8 编码规范代码布局缩进每级缩进用4个空格。括号中使用垂直隐式缩进或使用悬挂缩进。EXAMPLE:# (垂直隐式缩
- 在计算loss的时候,最常见的一句话就是tf.nn.softmax_cross_entropy_with_logits,那么它到底是怎么做的
- 第一种情况:有RAID,还需要做数据库备份吗?回答:需要。有了RAID,万一部份磁盘损坏,可以修复数据库,有的情况下数据库甚至可以继续使用。
- python使用qq邮箱(个人邮箱)发送邮件需开启qq邮箱的SMTP服务在设置中开启pop3/SMTP服务,返回的密码就是之后代码中登录使用
- 今天冒出来一个想法,在仅知道数据库名的情况下,用asp得到数据库中的所有表名、所有表的字段名、以及所有字段中的内容。经过一段时间查询资料和修
- 当请求 headers 中,添加一个name为 Accept,值为 application/json 的 header(也即“我”(浏览器)
- 上次用Javascript+ASP实现了无刷新的新闻列表,最后还有一个小问题没有解决:下边的分页数列"首页、上10页、下10页、尾
- 我们在编写asp程序时经常会使用到这个功能,一般我们这样判断如:if a="" then ,而这个函数考虑的就比较全面了
- Nocalhost是一种开发者工具,支持针对Kubernetes应用程序进行调试和部署。使用Nocalhost进行Python开发需要完成以
- Python中有一个有趣的语法,只要定义类型的时候,实现__call__函数,这个类型就成为可调用的。换句话说,我们可以把这个类型的对象当作
- 本文实例讲述了Python基于opencv的图像压缩算法。分享给大家供大家参考,具体如下:插值方法:CV_INTER_NN - 最近邻插值,
- 本文实例讲述了python3 BeautifulSoup模块使用字典的方法抓取a标签内的数据。分享给大家供大家参考,具体如下:# -*- c
- 有一个需求就是需要对url进行进一步的划分得到详细的各个字段信息,下面是简单的实现:#!/usr/bin/python# -*- codin
- 简单介绍NumPy系统是Python的一种开源的数组计算扩展。这种工具可用来存储和处理大型矩阵,比Python自身的嵌套列表(nested
- 模仿学习同事的代码来写的,主要是搞懂python中如何来组织包,如何调用包,如何读取配置文件,连接数据库,设置路由,路由分组。(注:使用的是
- 许多游戏玩家一定会对游戏中的动态鼠标指针有很深的印象,其实只要一句简单的CSS(层叠样式表),你也能在网页上实现这种效果。首先,你需要一个鼠
- 一、常见的匹配规则二、常见的匹配方法1、match()match()方法从字符串的起始位置开始匹配,该方法有两个参数,第一个是正则表达式,第
- 打开php.ini,首先找到;;;;;;;;;;;;;;;;; file uploads ;;;;;;;;;;;;;;;;;区域,有影响文件
- mean_squared_error / mse 均方误差,常用的目标函数,公式为((y_pred-y_true)**2).mean()mo