您的位置:首页 > 编程语言 > Python开发

学习Python运维之paramiko模块

2016-12-11 16:33 561 查看
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()
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: