paramiko模块

paramiko模块提供了ssh及sft进行远程登录服务器执行命令和上传下载文件的功能。这是一个第三方的软件包,使用之前需要安装。

import paramiko

# ssh root@ip

# 创建一个ssh对象

client = paramiko.SSHClient()

#如果第一次连接陌生的IP,自动选择yes确认连接

client.set_missing_host_key_policy(paramiko.AutoAddPolicy())

# 连接服务器

client.connect(hostname='111.231.215.66',port=22,username='手动屏蔽帐号',password='手动屏蔽密码')

# 执行操作

stdin,stdout,stderr = client.exec_command('hostname')

# 获取命令执行结果

host = stdout.read().decode('utf-8').strip()

print(host)

while True:

command = input("[root@%s]# " %host)

if command == 'exit()':

break

else:

r = client.exec_command(command)[1].read().decode('utf-8')

print(r)

# 关闭连接

client.close()

例子1:

连接文件 主机信息.txt 中的所有主机

不能连接返回连接失败,成功连接,返回其主机名

把连接情况写入文件。

import paramiko

client = paramiko.SSHClient()

client.set_missing_host_key_policy(paramiko.AutoAddPolicy())

def ssh_info(ip,port=22,user='root',passwd='westos'):

try:

client.connect(hostname=ip,port=port,username=user,password=passwd)

r = client.exec_command('hostname')[1].read().decode('utf-8')

except:

print('连接失败......')

return '连接失败......'

else:

client.close()

print('连接成功......','\n主机名:%s' %r)

return '连接成功......'+'\n主机名:%s' %r

with open('连接状况.txt','w') as f,open('主机信息.txt') as p:

for line in p:

line = line.strip()

ip, port, user, passwd = line.split(':')

s = ' 正在连接%s '.center(30, '+') % ip

f.write(s+'\n')

f.write(ssh_info(ip,port,user,passwd)+'\n')

例子2:

基于公钥私钥的批量连接

import paramiko

client = paramiko.SSHClient()

client.set_missing_host_key_policy(paramiko.AutoAddPolicy())

def ssh_info(ip,pkey,port=22,user='root'):

try:

print(' 正在连接%s '.center(30, '+') % ip)

client.connect(hostname=ip,port=port,username=user,pkey=pkey)

r = client.exec_command('hostname')[1].read().decode('utf-8')

except:

print('连接失败......')

else:

client.close()

print('连接成功......','\n主机名:%s' %r)

pkey = paramiko.RSAKey.from_private_key_file('id_rsa')

for i in range(254):

ip = '172.25.254.'+str(i+1)

ssh_info(ip,pkey)

例子3:

基于公钥私钥的上传下载

import paramiko

private_key = paramiko.RSAKey.from_private_key_file('id_rsa')

transport = paramiko.Transport(('172.25.254.39', 22))

transport.connect(username='root',pkey=private_key)

sftp = paramiko.SFTPClient.from_transport(transport)

#上川下载

sftp.put('/tmp/kiosk', '/mnt/kiosk2')

sftp.get('/mnt/kiosk2', '/home/kiosk/Desktop/day18/kiosk')

transport.close()

paramiko综合练习实例1

import os

import paramiko

group = [file.rstrip('.conf') for file in os.listdir('host')]

print('主机组'.center(30,'+'))

for i,g in enumerate(group):

print('\t',str(i+1),'\t',g)

choice = input('选择操作组:')

print('主机'.center(30,'+'))

host_info_list = [] # 存储文件中主机信息

file = 'host/'+choice+'.conf'

with open(file) as f:

for line in f:

line =line.split(':')

print('\t',line[0])

host_info_list.append(line)

def do_cmd(cmd,hostname,port=22, username='root', password='westos'):

print('连接主机 ',hostname)

try:

client.connect(hostname, port, username, password)

stdin, stdout, stderr = client.exec_command(cmd)

result = stdout.read().decode('utf-8').strip()

except:

print('连接失败......')

else:

client.close()

print(result)

def get_put(cmd,hostname,port=22, username='root', password='westos'):

print('连接主机 ', hostname)

try:

transport = paramiko.Transport((hostname, int(port)))

transport.connect(username=username, password=password)

sftp = paramiko.SFTPClient.from_transport(transport)

except:

print('连接失败......')

else:

# 上川下载

if cmd[0] == 'put':

sftp.put(cmd[1], cmd[2])

print('上传成功......')

elif cmd[0] == 'get':

sftp.get(cmd[1], cmd[2])

print('下载成功......')

else:

print('暂时没有这个命令的操作......',cmd[0])

transport.close()

while True:

cmd = input('>>>: ')

cmd = cmd.split()

if cmd == []:

continue

elif len(cmd) == 1:

client = paramiko.SSHClient()

client.set_missing_host_key_policy(paramiko.AutoAddPolicy())

for host in host_info_list:

do_cmd(cmd[0],host[0],host[1],host[2],host[3])

else:

for host in host_info_list:

get_put(cmd,host[0],host[1],host[2],host[3])

paramiko封装实例1:

import os

import paramiko

class SSH_host:

def __init__(self,ip,port,u,p,cmd):

self.ip = ip

self.port = port

self.username = u

self.passwd = p

self.cmd = cmd

def cmd(self):

print('连接主机 ',self.ip)

client = paramiko.SSHClient()

client.set_missing_host_key_policy(paramiko.AutoAddPolicy())

try:

client.connect(self.ip, self.port, self.username, self.passwd)

stdin, stdout, stderr = client.exec_command(self.cmd[0])

result = stdout.read().decode('utf-8').strip()

except:

print('连接失败......')

else:

print(result)

client.close()

def get(self):

print('连接主机 ', self.ip)

try:

transport = paramiko.Transport((self.ip, self.port))

transport.connect(self.username, self.passwd)

sftp = paramiko.SFTPClient.from_transport(transport)

except:

print('连接失败......')

else:

sftp.get(self.cmd[1], self.cmd[2])

print('下载成功......')

transport.close()

def put(self):

print('连接主机 ', self.ip)

try:

transport = paramiko.Transport((self.ip, self.port))

transport.connect(self.username, self.passwd)

sftp = paramiko.SFTPClient.from_transport(transport)

except:

print('连接失败......')

else:

sftp.put(self.cmd[1], self.cmd[2])

print('上传成功......')

transport.close()

if __name__ == "__main__":

group = [file.rstrip('.conf') for file in os.listdir('host')]

print('主机组'.center(30,'+'))

for i,g in enumerate(group):

print('\t',str(i+1),'\t',g)

choice = input('选择操作组:')

print('主机'.center(30,'+'))

host_info_list = [] # 存储文件中主机信息

file = 'host/'+choice+'.conf'

with open(file) as f:

for line in f:

line =line.split(':')

print('\t',line[0])

host_info_list.append(line)

while True:

cmd = input('>>>: ')

cmd = cmd.split()

for host in host_info_list:

link = SSH_host(host[0], int(host[1]), host[2], host[3], cmd)

if cmd == []:

continue

else:

if hasattr(link, cmd[0]):

print(cmd[0])

python paramiko sftp_Python学习—paramiko模块实现简单的ssh与sftp相关推荐

  1. python requests 示例_Python Requests模块的简单示例

    这篇文章主要为大家详细介绍了Python Requests模块的简单示例,具有一定的参考价值,可以用来参考一下. 对python这个高级语言感兴趣的小伙伴,下面一起跟随512笔记的小编两巴掌来看看吧! ...

  2. python xlsxwriter dict_python学习-xlsxwriter模块

    可以完成xlsx文件的自动化构造,包括: 合并单元格,制作excel图表等功能: import xlsxwriter # Create an new Excel file and add a work ...

  3. 【python】imp让引用模块更加简单,import升级版

    imp,顾名思义就是"import"的缩写.在功能上也一样,但用起来比import要成熟一些. 直接看例子:在一个py文件中调用另一个py文件,不用import的方式. 第一个文件 ...

  4. Python标准库学习——sys模块

    sys模块可以控制Python Shell窗口信息. 1.version 和 version_info 属性,可以列出目前所使用Python的版本信息. 列出目前所使用Python的版本信息. imp ...

  5. python turtle什么意思_python模块turtle简单用法

    ##初始化turtle: t = turtle.Turtle() 或者 t = turtle.Pen() ##查询turtle状态 #位置 t.position() #箭头朝向,箭头朝向按照顺时针或者 ...

  6. 初探Python字节码和dis模块

    本文主要介绍 Python 字节码.Python 虚拟机内幕以及 dis 模块的简单应用.阅读本文预计 10 min. 初探Python字节码和dis模块 1. 前言 2. Python 字节码 2. ...

  7. Python基础 - 第九天 - paramiko模块、进程、线程

    本篇内容: 1.paramiko模块使用 2.进程.线程简介 3.python调用线程的方法 4.join - 等待线程执行 5.守护线程 6.GIL - 全局解释器锁 7.互斥锁 8.信号量 9.事 ...

  8. python paramiko_python中的paramiko模块

    paramiko是用python语言写的一个模块,遵循SSH2协议,支持以加密和认证的方式,进行远程服务器的连接.paramiko支持Linux, Solaris, BSD, MacOS X, Win ...

  9. python paramiko并发_使用Python paramiko模块利用多线程实现ssh并发执行操作

    1.paramiko概述 ssh是一个协议,OpenSSH是其中一个开源实现,paramiko是Python的一个库,实现了SSHv2协议(底层使用cryptography). 有了Paramiko以 ...

最新文章

  1. 39个超实用jQuery实例应用特效
  2. 收集国内著名互联网公司前端/UED部门的blog,方便学习交流
  3. [TJOI2018]xor BZOJ5338 可持久trie
  4. android视频闪退,安卓 app 视频闪退问题
  5. 对状态代码使用JAX-RS异常
  6. mysql 学习笔记05 统计函数的相关使用
  7. ubuntu 开机后不动_Ubuntu启动时停止的问题
  8. “中文直达”能推动移动上网入口洗牌吗?
  9. yum 安装vsftp_CentOS 8.1 配置vsftp和yum
  10. VMware虚拟机安装Ubuntu20.04详细图文教程
  11. slam是什么意思?一文带你读懂SLAM
  12. Java 基础知识总结—ArrayList
  13. activity透明主题引起生命周期的变化
  14. 在ThemeForest上销售的利弊
  15. 呼叫中心-自动外呼接口设置
  16. qt中画出漂亮的函数曲线
  17. spring-data-jpa hiberneate 中 uui的生成策略
  18. 拼多多运营该怎么做你知道吗?
  19. 速卖通流量新赛道,AE Mall商家享有权益和招商标准,看这篇文章就好了
  20. 读书笔记 -- 算法入门

热门文章

  1. 安装Openface,实现人脸比对
  2. 揭秘华尔街人工智能真实水平:距离40%的金融民工被取代或只剩8年
  3. 解决redis启动时的警告
  4. centos下安装ruby,删除ruby
  5. 大剑无锋之大数据面试题第一套(选择题)
  6. Hadoop权威指南 _02大体目录
  7. leetcode 516. Longest Palindromic Subsequence | 516. 最长回文子序列(递归 -> 傻缓存 ->DP)
  8. 爬虫实战:CentOS安装JDK,部署Java程序,利用screen使其保持在前台运行
  9. netty系列之:自定义编码解码器
  10. Leet Code OJ 226. Invert Binary Tree [Difficulty: Easy]