Python 学习笔记 - Paramiko 模块

本文介绍了Python中的Paramiko模块,该模块用于实现SSH协议,包括远程执行命令、上传及下载文件等功能。通过三个实例展示了如何使用Paramiko进行SSH连接、执行命令及文件传输。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Python提供了一个Paramiko模块,允许我们通过SSH 对远程系统进行操作,上传和下载文件。他的使用很直观,下面直接看例子。

 

例1

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

#!/usr/bin/env python

# -*- coding:utf-8 -*-

# Author Yuan Li

import paramiko

# 创建SSH对象

ssh = paramiko.SSHClient()

# 允许连接不在know_hosts文件中的主机

ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())

# 连接服务器

ssh.connect(hostname='host', port=22, username='root', password='123')

# 执行命令

stdin, stdout, stderr = ssh.exec_command('df -hT')

# 获取命令结果

result = stdout.read()

print(result.decode())

# 关闭连接

ssh.close()

----------

"C:\Program Files\Python3\python.exe" C:/Users/yli/pycharmprojects/Exercise/Week12/paramiko_test.py

Filesystem              Type      Size  Used Avail Use% Mounted on

/dev/mapper/centos-root xfs        28G  6.5G   22G  24% /

devtmpfs                devtmpfs  988M     0  988M   0% /dev

tmpfs                   tmpfs     998M   80K  998M   1% /dev/shm

tmpfs                   tmpfs     998M  112M  887M  12% /run

tmpfs                   tmpfs     998M     0  998M   0% /sys/fs/cgroup

/dev/sda1               xfs       497M  169M  329M  34% /boot

tmpfs                   tmpfs     200M   12K  200M   1% /run/user/42

tmpfs                   tmpfs     200M     0  200M   0% /run/user/0

 

如果看看ssh.connect()这个方法的源码,我们可以看见他实际上调用的是Transport这个类的方法。因此我们可以直接使用Transport来创建一个session,然后进行连接,效果和上面是一样的。

 

例2

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

import paramiko

#创建一个transport session

transport = paramiko.Transport(('sydnagios'22))

 

#连接session

transport.connect(username='root', password='Goat2015')

ssh = paramiko.SSHClient()

ssh._transport = transport

 

#执行命令

stdin, stdout, stderr = ssh.exec_command('df')

print (stdout.read().decode())

 

#创建sftp的对象

sftp=paramiko.SFTPClient.from_transport(transport)

 

#上传

sftp.put('c:\\temp\\aaa.txt','/tmp/aaa.txt')

 

#下载

sftp.get('/tmp/aaa.txt','c:\\temp\\bbb.txt')

transport.close()

----------

"C:\Program Files\Python3\python.exe" C:/Users/yli/pycharmprojects/Exercise/Week12/paramiko_test.py

Filesystem              Type      Size  Used Avail Use% Mounted on

/dev/mapper/centos-root xfs        28G  6.5G   22G  24% /

devtmpfs                devtmpfs  988M     0  988M   0% /dev

tmpfs                   tmpfs     998M   80K  998M   1% /dev/shm

tmpfs                   tmpfs     998M  112M  887M  12% /run

tmpfs                   tmpfs     998M     0  998M   0% /sys/fs/cgroup

/dev/sda1               xfs       497M  169M  329M  34% /boot

tmpfs                   tmpfs     200M   12K  200M   1% /run/user/42

tmpfs                   tmpfs     200M     0  200M   0% /run/user/0

 

 

例3,我们可以完善一下例2,把这么操作都封装到自定义的类里

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

import paramiko

import uuid

class SSHConnection(object):

 

    #初始化封装字段

    def __init__(self, host='sydnagios', port=22, username='root',pwd='123'):

        self.host = host

        self.port = port

        self.username = username

        self.pwd = pwd

        self.__k = None

    #连接session,执行操作,断开session

    def run(self):

        self.connect()

        pass

        self.close()

    #连接

    def connect(self):

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

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

        self.__transport = transport

    #断开

    def close(self):

        self.__transport.close()

         

    #执行命令    

    def cmd(self, command):

        ssh = paramiko.SSHClient()

        ssh._transport = self.__transport

        # 执行命令

        stdin, stdout, stderr = ssh.exec_command(command)

        # 获取命令结果

        result = stdout.read()

        return result

    def upload(self,local_path, target_path):

        # 连接,上传

        sftp = paramiko.SFTPClient.from_transport(self.__transport)

        # 将location.py 上传至服务器 /tmp/test.py

        sftp.put(local_path, target_path)

ssh = SSHConnection()

ssh.connect()

r1 = ssh.cmd('df')

print(r1.decode())

ssh.upload('c:\\temp\\aaa.txt'"/home/yli/s7.py")

ssh.close()

----------

"C:\Program Files\Python3\python.exe" C:/s13课上代码/s13day13课上代码/s13day13_课上代码/paramiko模块_demo.py

Filesystem              1K-blocks    Used Available Use% Mounted on

/dev/mapper/centos-root  28813572 6760732  22052840  24% /

devtmpfs                  1011616       0   1011616   0% /dev

tmpfs                     1021272      80   1021192   1% /dev/shm

tmpfs                     1021272  113928    907344  12% /run

tmpfs                     1021272       0   1021272   0% /sys/fs/cgroup

/dev/sda1                  508588  172604    335984  34% /boot

tmpfs                      204256      12    204244   1% /run/user/42

tmpfs                      204256       0    204256   0% /run/user/0

 

 

登录乐搏学院官网http://www.learnbo.com/

或关注我们的官方微博微信,还有更多惊喜哦~

 

本文出自 “麻婆豆腐” 博客,请务必保留此出处http://beanxyz.blog.51cto.com/5570417/1875644

转载于:https://my.oschina.net/learnbo/blog/869918

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值