Python paramik

本节内容

  1. paramiko模块

 

1.paramiko模块

Python的paramiko模块,该模块机遇SSH用于连接远程服务器并执行相关操作

Python的paramiko模块,该模块机遇SSH用于连接远程服务器并执行相关操作

1.1 基于用户名密码连接

一下的代码中所有的输出是基于windows来输出的,编码方式为‘gbk’.

#!/usr/bin/env python
# -*- coding:utf-8 -*-
import paramiko
#  创建ssh对象
ssh= paramiko.SSHClient()
#  允许连接不在know_hosts文件中的主机
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
#  连接服务器
ssh.connect(hostname='192.168.111.128',port=22,username='root',password='123456')
comm = input(":>>")
while comm != 'q':
    comm = input(":>>")
    # 执行命令
    stdin, stdout, stderr = ssh.exec_command(comm)
    err = stderr.read()
    if err:
        result = err
    else:
        result = stdout.read()
    print(result.decode('gbk'))
ssh.close()
#!/usr/bin/env python
# -*- coding:utf-8 -*-
import paramiko

transport = paramiko.Transport(('192.168.111.128',22))
transport.connect(username='root',password='123456')

ssh = paramiko.SSHClient()
ssh._transport = transport
comm = input(":>>")
while comm != 'q':
    stdin,stdout,stderr = ssh.exec_command(comm)
    err = stderr.read()
    if err:
        re_msg = err
    else:
        re_msg = stdout.read()
    print(re_msg.decode('gbk'))
    comm = input(":>>")
基于Transport的连接

1.2 基于秘钥文件连接

#!/usr/bin/env python
# -*- coding:utf-8 -*-
import paramiko
def para(filepath,hostname,port,username):
    private_key = paramiko.RSAKey.from_private_key_file(filepath)
    ssh = paramiko.SSHClient()
    ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
    ssh.connect(hostname=hostname,port=port,username=username,pkey=private_key)
    comm = input(":>>")
    stdin,stdout,stderr = ssh.exec_command(comm)
    err = stderr.read()
    if err:
        re_msg = err
    else:
        re_msg = stdout.read()
    return  re_msg
if __name__ == '__main__':
    filepath = r'id_rsa_2048'
    a = para(filepath,'192.168.111.128',22,'root')
    print(a.decode('gbk'))
#!/usr/bin/env python
# -*- coding:utf-8 -*-
import paramiko
pkeyfile = paramiko.RSAKey.from_private_key_file(r'id_rsa_2048')

transport = paramiko.Transport(('192.168.111.128',22))
transport.connect(username='root',pkey=pkeyfile)

ssh = paramiko.SSHClient()

ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())

ssh._transport = transport
comm = input(":>>")
while comm != 'q':
    stdin,stdout,stderr = ssh.exec_command(comm)
    err = stderr.read()
    if err:
        re_msg = err
    else:
        re_msg = stdout.read()
    print(re_msg.decode('gbk'))
    comm = input(":>>")
基于transport的秘钥文件连接

1.3 基于秘钥字符串的连接

#!/usr/bin/env python
# -*- coding:utf-8 -*-
import paramiko
from io import StringIO
#  秘钥以省略
key_str = '''XXXXXXXXXXXX'''

pkey_str = paramiko.RSAKey(file_obj=StringIO(key_str))

ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())

ssh.connect(hostname='192.168.111.128',port=22,username='root',pkey=pkey_str)
comm = input(":>>")
while comm != 'q':
    stdin,stdout,stderr = ssh.exec_command(comm)
    if stderr.read():
        print(stderr.read().decode('gbk'))
    else:
        print(stdout.read().decode('gbk'))
    comm = input(":>>")
#!/usr/bin/env python
# -*- coding:utf-8 -*-
import paramiko
from io import StringIO

key_str = '''XXXXXXXXXXXX'''

pkey_str = paramiko.RSAKey(file_obj=StringIO(key_str))

transport = paramiko.Transport(('192.168.111.128',22))
transport.connect(username='root',pkey=pkey_str)

ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())

ssh._transport = transport
comm = input(":>>")
while comm != 'q':
    stdin,stdout,stderr = ssh.exec_command(comm)
    if stderr.read():
        print(stderr.read().decode('gbk'))
    else:
        print(stdout.read().decode('gbk'))
    comm = input(":>>")
基于transport的秘钥串连接

1.4 文件上传和下载

#!/usr/bin/env python
# -*- coding:utf-8 -*-
# 上传
import paramiko
transport = paramiko.Transport(('192.168.111.128',22))
transport.connect(username='root',password='123456')

helei = paramiko.SFTPClient.from_transport(transport)

localpath = r'C:\Users\user\Desktop\123.txt'
remotepath = r'/tmp/helei.hahaha'
helei.put(localpath,remotepath)
transport.close()
# 下载
import paramiko
transport = paramiko.Transport(('192.168.111.128',22))
transport.connect(username='root',password='123456')

sftp = paramiko.SFTPClient.from_transport(transport)

localpath = r'C:\Users\user\Desktop\123.txt'
remotepath = r'/helei.haha'
sftp.get(localpath,remotepath)
transport.close()
上传和下载

 

 

posted @ 2017-04-24 23:12  40块钱抓娃娃  阅读(372)  评论(0编辑  收藏  举报