学习Python运维之paramiko模块

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


1.安装


#paramiko模块的安装需要先安装PyCrypto模块


wget  https://pypi.python.org/packages/source/p/pycrypto/pycrypto-2.6.1.tar.gz


wget


cd pycrypto-2.6.1


python setup.py build


python setup.py install


https://pypi.python.org/packages/source/p/paramiko/paramiko-1.13.0.tar.gz


cd paramiko-1.13.0


python setup.py build


python setup.py install


yum -y  install python-crypto python-paramiko


测试


>>> import paramiko


>>> dir(paramiko)


['AUTH_FAILED', 'AUTH_PARTIALLY_SUCCESSFUL', 'AUTH_SUCCESSFUL', 'Agent', 'AgentKey', 'AuthHandler', 'AuthenticationException', 'AutoAddPolicy', 'BadAuthenticationType', 'BadHostKeyException', 'BaseSFTP', 'BufferedFile', 'Channel', 'ChannelException', 'ChannelFile', 'DSSKey', 'HostKeys', 'InteractiveQuery', 'Message', 'MissingHostKeyPolicy', 'OPEN_FAILED_ADMINISTRATIVELY_PROHIBITED', 'OPEN_FAILED_CONNECT_FAILED', 'OPEN_FAILED_RESOURCE_SHORTAGE', 'OPEN_FAILED_UNKNOWN_CHANNEL_TYPE', 'OPEN_SUCCEEDED', 'PKey', 'Packetizer', 'PasswordRequiredException', 'RSAKey', 'RejectPolicy', 'SFTP', 'SFTPAttributes', 'SFTPClient', 'SFTPError', 'SFTPFile', 'SFTPHandle', 'SFTPServer', 'SFTPServerInterface', 'SFTP_BAD_MESSAGE', 'SFTP_CONNECTION_LOST', 'SFTP_EOF', 'SFTP_FAILURE', 'SFTP_NO_CONNECTION', 'SFTP_NO_SUCH_FILE', 'SFTP_OK', 'SFTP_OP_UNSUPPORTED', 'SFTP_PERMISSION_DENIED', 'SSHClient', 'SSHConfig', 'SSHException', 'SecurityOptions', 'ServerInterface', 'SubsystemHandler', 'Transport', 'WarningPolicy', '__all__', '__author__', '__builtins__', '__date__', '__doc__', '__file__', '__license__', '__name__', '__package__', '__path__', '__version__', '__version_info__', 'agent', 'auth_handler', 'ber', 'buffered_pipe', 'channel', 'client', 'common', 'compress', 'config', 'dsskey', 'file', 'hostkeys', 'kex_gex', 'kex_group1', 'message', 'packet', 'pipe', 'pkey', 'primes', 'randpool', 'resource', 'rng', 'rng_posix', 'rsakey', 'server', 'sftp', 'sftp_attr', 'sftp_client', 'sftp_file', 'sftp_handle', 'sftp_server', 'sftp_si', 'ssh_exception', 'sys', 'transport', 'util']


>>>




例子1:ssh到多台主机,执行相同的命令。


#!/usr/bin/python


import paramiko


USER = 'root'


PASSWORD = '123456'


COMMAND = 'mkdir 888'


for line in open('/root/ip.txt'):


    IP = line


    paramiko.util.log_to_file('/root/zhu.log')


    s = paramiko.SSHClient()


    s.set_missing_host_key_policy(paramiko.AutoAddPolicy())


    s.connect(hostname=IP,username=USER,password=PASSWORD)


    s.exec_command(COMMAND)


    s.close


###############


[root@zhu ~]# cat ip.txt


192.168.56.101


192.168.56.102




例子2:把指定的文件上传到多台主机上。


#!/usr/bin/python


import paramiko


PORT = 22


USER = 'root'


PASSWORD = '123456'


REMORE_PATH = '/tmp/qianshan.txt'


LOCAL_PATH = '/root/1.txt'


for line in open('/root/ip.txt'):


    IP = line


    t = paramiko.Transport((IP,PORT))


    t.connect(username=USER,password=PASSWORD)


    s = paramiko.SFTPClient.from_transport(t)


    s.put(LOCAL_PATH,REMORE_PATH)


    t.close


###################


192.168.56.101


192.168.56.102



自已实际操作:


报错:ImportError: No module named ecdsa

 解决办法:

  下载安装包:https://pypi.python.org/packages/source/e/ecdsa/ecdsa-0.11.tar.gz

  cd ecdsa-0.11

  tar -xzf ecdsa-0.11.tar.gz

  python setup.py install



---------------------------------用户名/密码方式--------------------------------------------------


#!/usr/bin/python
#coding:utf-8


import paramiko
import sys
import os


host = sys.argv[1]
user = 'root'
password = '123456'


cmd = sys.argv[2]


#绑定实例
s = paramiko.SSHClient()


#加载本机host主机文件
s.load_system_host_keys()
s.set_missing_host_key_policy(paramiko.AutoAddPolicy())


s.connect(host,22,user,password,timeout=5)


#执行命令
stdin, stdout, stderr = s.exec_command(cmd)


#读取结果
cmd_result = stdout.read(), stderr.read()


for line in cmd_result:
    print line


s.close()


-------------------------ssh互信登陆---------------------------------------------------


#!/usr/bin/python
#coding:utf-8


import paramiko
import sys
import os


host = sys.argv[1]
pkey_file = '/root/.ssh/id_rsa'
key = paramiko.RSAKey.from_private_key_file(pkey_file)


cmd = sys.argv[2]


s = paramiko.SSHClient()
s.load_system_host_keys()
s.set_missing_host_key_policy(paramiko.AutoAddPolicy())


s.connect(host,22,pkey=key,timeout=5)
stdin, stdout, stderr = s.exec_command(cmd)


cmd_result = stdout.read(), stderr.read()


for line in cmd_result:
    print line


s.close()

----------------------sftp传文件--------------------------------------------------------------

#!/usr/bin/python
#coding:utf-8


import paramiko
import sys
import os


host = sys.argv[1]
myuser = 'root'
mypassword = '123456'


#绑定实例
s = paramiko.SSHClient()


#加载本机host主机文件
s.load_system_host_keys()
s.set_missing_host_key_policy(paramiko.AutoAddPolicy())


t = paramiko.Transport((host,22))
t.connect(username=myuser,password=mypassword)


sftp = paramiko.SFTPClient.from_transport(t)
sftp.get('/home/paramkio_sftp.py','/tmp/paramiko2_sftp.py')
sftp.put('/home/test.py','/tmp/kkk.py')


t.close()

Pythonparamiko模块是一种用于实现自动化运维的工具,可以通过SSH协议连接到远程服务器,并执行命令、上传、下载文件等操作。paramikoPython中最常用和最成熟的SSH库之一。 通过paramiko,我们可以简化远程服务器的管理和配置工作。使用paramiko,可以实现自动化的服务器批量部署、配置文件更新、软件升级等任务。它提供了一组简洁的API,使得我们可以通过Python脚本来实现各种操作。 paramiko的主要功能包括远程命令执行、sftp操作、文件传输等。我们可以使用paramiko连接到远程服务器,执行命令并获取输出。同时,我们还可以使用sftp进行文件的上传和下载操作,方便我们进行文件的管理和传输。 paramiko的优点包括易用性和灵活性。它提供了一个面向对象的API接口,使得我们可以轻松地进行远程管理。同时,paramiko还支持并发操作,可以同时连接多个服务器进行批量操作,提高效率。 另外,paramiko还具有安全性和稳定性。它使用SSH协议进行连接和操作,能够进行加密通信,确保数据的安全性。同时,paramiko经过了广泛的测试和使用,具有较高的稳定性,可以满足日常运维工作的需求。 总之,paramiko是一种功能强大、易于使用的Python工具,可以实现自动化运维任务,如远程命令执行、文件传输等。它的出色表现使得它成为了自动化运维领域的首选工具之一。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值