paramiko模块使用

paramiko简介

  • paramiko是用Python语言写的一个模块,遵循SSH2协议,支持以加密和认证的方式,进行远程服务器的连接。
  • paramiko主要是通过ssh协议对远程主机进行管理:包括执行远程主机CLI、上传和下载文件等。

安装paramiko模块

python -m pip install paramiko

paramiko命令参数详解

  • 利用密码登陆方式批量执行命令

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

导入模块

import paramiko

实例化一个SSHClient对象

= paramiko.SSHClient()

自动添加策略  #首次登陆用交互式确定(允许连接不在know_hosts文件中的主机)

s.set_missing_host_key_policy(paramiko.AutoAddPolicy())

要连接的主机地址信息

s.connect(hostname=‘ip地址‘, port=端口号, username=‘用户名‘, password=‘密码‘)

要执行的命令

stdin, stdout, stderr = s.exec_command(‘执行的命令‘)

查看命令的执行结果

print(stdout.read())

  • 利用公钥验证方式批量执行命令

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

首先建立公钥和私钥文件

# ssh-keygen

    

上传本地的公钥到远程主机的.ssh/authorized_keys文件中

# ssh-copy-id -i .ssh/id_rsa.pub [email protected]

    

导入模块

import paramiko

实例化一个对象

= paramiko.SSHClient()

自动添加策略  #首次登陆用交互式确定

s.set_missing_host_key_policy(paramiko.AutoAddPolicy())

    

建立私钥文件连接

key = paramiko.RSAKey.from_private_key_file(‘/root/.ssh/id_rsa‘)

    

通过私钥验证的方式登录远程主机

s.connect(hostname=‘ip地址‘, port=端口号, username=‘用户名‘, pkey=key)

    

要执行的命令

stdin, stdout, stderr = s.exec_command(‘执行的命令‘)

查看命令的执行结果

print(stdout.read())

  • 从远程主机上传、下载文件

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

导入模块

import paramiko

#建立一个加密的传输管道

= paramiko.Transport((‘ip地址‘,端口号))

#建立连接

s.connect(username=‘用户名‘,password=‘密码‘)

#建立一个sftp客户端对象,通过ssh transport操作远程文件

sftp = paramiko.SFTPClient.from_transport(s)

#上传本地文件到远程主机

sftp.put(localFile,remoteFile)

#从远程主机下载文件到本地

sftp.get(remoteFile,localFile)

#关闭sftp连接

s.close()

脚本演示

  • 局域网物理主机批量管理:执行命令

脚本还有很多瑕疵,只是作为参考练习,前提是所有主机的用户名、密码和端口号都要相同

例如:Username:root    Password:redhat     Port:22


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

[[email protected] script]# cat 02_paramiko_process.py 

#!/usr/bin/env python

#coding:utf8

from multiprocessing import Process

import paramiko

import sys

Username = ‘root‘

Password = ‘redhat‘

Port = 22

def runCmd(ip,cmd):

    = paramiko.SSHClient()

    s.set_missing_host_key_policy(paramiko.AutoAddPolicy())

    try:

        s.connect(hostname=ip, port=Port, username=Username, password=Password)

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

        result =  stdout.read()

    print (ip,result,)

    except:

    print (‘%s is not exists‘ % ip)

def ipProcess():

    try:

        cmd = sys.argv[1]

        for in range(2,255):

            ip = ‘192.168.1.%s‘ % i

        = Process(target=runCmd,args=(ip,cmd))

            p.start()

    except IndexError:

        print (‘please input a command.‘)

    

if __name__ == ‘__main__‘:

    ipProcess()

执行脚本:


1

[[email protected] script]# python 02_paramiko_process.py uptime

截图部分返回结果:


1

2

3

4

5

6

7

8

9

10

11

12

13

192.168.1.57  10:48:49 up  2:29,  0 users,  load average: 0.000.000.00

192.168.1.56  10:50:25 up  2:29,  0 users,  load average: 0.000.000.00

192.168.1.100  10:48:50 up  2:29,  0 users,  load average: 0.000.000.00

192.168.1.127 is not exists

192.168.1.210  22:48:51 up  2:28,  0 users,  load average: 0.000.000.00

192.168.1.51  10:48:52 up  2:28,  0 users,  load average: 0.000.000.00

192.168.1.55  10:50:26 up  2:29,  0 users,  load average: 0.000.000.00

192.168.1.122 is not exists

192.168.1.58 is not exists

192.168.1.52 is not exists

192.168.1.53 is not exists

192.168.1.50 is not exists

192.168.1.215  02:31:14 up  2:07,  4 users,  load average: 4.751.460.82

  • 局域网物理主机批量管理:执行上传、下载文件

这里只对批量上传做了演示,对于批量下载文件只是一行代码的更换就可以了,我也在脚本中添加了注释行。


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

[[email protected] script]# cat 03_put_paramiko_process.py 

#!/usr/bin/env python

#coding:utf8

from multiprocessing import Process

import paramiko

import sys

Username = ‘root‘

Password = ‘redhat‘

Port = 22

def sftpPut(ip):

    try:

        = paramiko.Transport((ip,Port))

        s.connect(username=Username,password=Password)

        sftp = paramiko.SFTPClient.from_transport(s)

        localFile = ‘/root/sync.sh‘

        remoteFile = ‘/opt/sync.sh‘

        sftp.put(localFile,remoteFile)

        #sftp.get(remoteFile,localFile)

        s.close()

    print (‘%s put successful.‘ % ip)

    except:

    print (‘%s not exists.‘ % ip)

def ipProcess():

    for in range(2,255):

        ip = ‘192.168.1.%s‘ % i

        = Process(target=sftpPut,args=(ip,))

        p.start()

    

if __name__ == ‘__main__‘:

    ipProcess()

执行脚本:


1

[[email protected] script]# python 03_put_paramiko_process.py

截图部分返回结果:


1

2

3

4

5

6

7

8

9

10

11

12

13

192.168.1.55 put successful.

192.168.1.181 not exists.

192.168.1.198 not exists.

192.168.1.200 not exists.

192.168.1.207 not exists.

192.168.1.209 not exists.

192.168.1.57 put successful.

192.168.1.51 put successful.

192.168.1.56 put successful.

192.168.1.233 not exists.

192.168.1.127 not exists.

192.168.1.100 put successful.

192.168.1.210 put successful.

登陆远程主机查看文件是否上传完成:


1

2

3

4

5

6

7

8

[[email protected] script]# ssh 192.168.1.51

Address 192.168.1.51 maps to localhost, but this does not map back to the address - POSSIBLE BREAK-IN ATTEMPT!

[email protected]192.168.1.51‘s password: 

Last login: Wed Mar 11 11:04:30 2015 from 192.168.1.112

[[email protected] ~]# ifconfig |grep inet |head -1

          inet addr:192.168.1.51  Bcast:192.168.1.255  Mask:255.255.255.0

[[email protected] ~]# ll /opt/sync.sh -d

-rw-r--r-- 1 root root 333 3月  11 11:05 /opt/sync.sh    #已经成功上传文件

  • 注意:
  • 批量上传文件脚本只能满足单个文件,如何实现多个文件上传和下载呢?可以通过os模块来实现,下一篇文章中介绍如何以更人性化的方式实现参数上传下载,那就是os模块和optparse模块
时间: 2024-10-05 23:17:53

paramiko模块使用的相关文章

paramiko模块

paramiko模块 下载安装 # pycrypto,由于 paramiko 模块内部依赖pycrypto,所以先下载安装pycrypto # 下载安装 pycrypto wget http://files.cnblogs.com/files/wupeiqi/pycrypto-2.6.1.tar.gz tar -xvf pycrypto-2.6.1.tar.gz cd pycrypto-2.6.1 python setup.py build python setup.py install # 进

python-----堡垒机前戏paramiko模块

堡垒机前戏 开发堡垒机之前,先来学习Python的paramiko模块,该模块机遇SSH用于连接远程服务器并执行相关操作 SSHClient 用于连接远程服务器并执行基本命令 基于用户名密码连接: import paramiko # 创建SSH对象 ssh = paramiko.SSHClient() # 允许连接不在know_hosts文件中的主机 ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) # 连接服务器 ssh.con

python之paramiko模块

python paramiko模块 1.安装 1225 ./configure #在解压后的python2.7.9的目录下 1226 make 1227 make install 1228 cd /usr/local/ 1229 ls 1230 cd bin 1231 ls 1232 ./python 1233 python 1234 cd /usr/bin 1235 ls 1236 ll python* 1237 mv ./python ./python26 1238 ln -s /usr/l

linux系统上安装paramiko模块

Linux系统上安装paramiko模块要求python要是2.7以上的,所以在安装模块之前应该安装python2.7(这里的安装过程略去) 在安装setuptools的时候突然报错了,RuntimeError:Compression requires the (missing) zlib module原因是因为没有安装zilb和zlib-devel包. yum install zlib yum installzlib-devel 安装完成后,重新编译 python2.7[不需要删除,只需要重新

python实战第一天-paramiko模块并练习

操作系统 Ubuntu 15.10 IDE & editor JetBrains PyCharm 5.0.2 ipython3 Python版本 python-3.4.3 安装paramiko pip3 install paramiko [email protected]:~$ pip3 install paramiko Collecting paramiko Downloading paramiko-1.16.0-py2.py3-none-any.whl (169kB) 100% |█████

paramiko模块执行linux下nohup卡住的问题。

今天做一个自动化部署的时候发现,服务端通过python的paramiko模块推命令的时候卡住了,没反映了.入下图: 我客户端那边是执行一个shell脚本,脚本里用nohup来启一个python脚本(执行jar包也一样样). 排查发现执行后光标是不能跳刀终端的起始位置的,(就是$或者#后面),需要敲一个回车才行.因为nohup启动脚本或者程序时如果默认不重定向到指定文件的话,默认或有一个错误输出.所以,我们在执行nohup的时候加上重定向到nohup.out中即可(错误输出最好也重定向到标准输出)

堡垒机--paramiko模块

做堡垒机之前,来了解一下paramiko模块. 实际上底层封装的SSH. SSHclient(1) import paramiko #实例化一个ssh ssh = paramiko.SSHClient() #设置主机不在khost_key中也能连接 ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) #创建连接 ssh.connect(hostname='192.168.12.100',port=22,username='root'

Python paramiko 模块

paramiko模块机遇SSH用于连接远程服务器并执行相关操作 SSHClient 用于连接远程服务器并执行基本命令 基于用户名密码连接: import paramiko # 创建SSH对象 ssh = paramiko.SSHClient() # 允许连接不在know_hosts文件中的主机 ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) # 连接服务器 ssh.connect(hostname='host', port=po

python小白-day9 数据库操作与Paramiko模块

paramiko模块 SSHClient 用于连接远程服务器并执行基本命令 基于用户名密码连接: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 import paramiko # 创建SSH对象 ssh = paramiko.SSHClient() # 允许连接不在know_hosts文件中的主机 ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) # 连接服务器 ssh.connect(hostna

Win7下Python2.7环境安装paramiko模块(转)

Win7下Python2.7环境安装paramiko模块,经过安装并测试成功,整理文档如下: 1.下载安装Windows版本的Python2.7,我默认装在C:\Python27 我的python已经安装,这里不做python2.7的安装步骤的详解 2.下载PyCrypto2.6 for Python 2.7 64bit 地址为: http://www.voidspace.org.uk/python/modules.shtml#pycrypto 以管理员权限执行安装程序,一路Next即可 3.下