`

paramiko的ssh与vsftp示例

阅读更多

我已验证的示例:

 

def paramiko_ssh():
        
        host = "123.56.14.5"
        port = 22
        client = paramiko.SSHClient()
        client.load_system_host_keys()
        client.set_missing_host_key_policy(paramiko.client.WarningPolicy())
        try:
            client.connect(host, port, username='root', password='xxx', timeout=30)
        except Exception as e:
            print(e)
        stdin, stdout, stderr = client.exec_command('ls /opt')
        for line in stdout:
            print('... ' + line.strip('\n'))
        
        client.close()
       

def paramiko_key():
    try:
        k = paramiko.RSAKey.from_private_key_file("~/.ssh/id_rsa")
        client = paramiko.SSHClient()
        client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
        client.connect(hostname="123.56.14.5", username="root", pkey=k)
        stdin, stdout, stderr = client.exec_command('ls /opt')
        for line in stdout:
            print('... ' + line.strip('\n'))
    except Exception as e:
        print(e)
    
    finally:
        client.close()

 

pexpect代码示例     

#!/usr/bin/python
# encoding=utf-8
# Filename: pexpect_test.py
import pexpect
defsshCmd(ip, passwd, cmd):
    ret = -1
    ssh = pexpect.spawn('ssh root@%s "%s"' % (ip, cmd))
    try:
        i = ssh.expect(['password:', 'continue connecting(yes/no)?'], timeout=5)
        if i == 0:
            ssh.sendline(passwd)
        elif i == 1:
            ssh.sendline('yes\n')
            ssh.expect('password:')
            ssh.sendline(passwd)
        ssh.sendline(cmd)
        r = ssh.read()
        print r
        ret = 0
    except pexpect.EOF:
        print "EOF"
        ret = -1
    except pexpect.TIMEOUT:
        print "TIMEOUT"
        ret = -2
    finally:
        ssh.close()
    return ret

sshCmd('xxx.xxx.xxx.xxx','xxxxxx','ls /root')

paramiko代码示例

注意:必须要增加client.load_system_host_keys()此句,否则报如下错误:

unbound method missing_host_key() must be called with AutoAddPolicy instance as first argument (got SSHClient instance instead)

#!/usr/bin/python
# encoding=utf-8
# Filename: paramiko_test.py
import datetime
import threading
import paramiko

defsshCmd(ip, username, passwd, cmds):
    try:
        client = paramiko.SSHClient()
        client.load_system_host_keys()
        client.set_missing_host_key_policy(paramiko.AutoAddPolicy)
        client.connect(ip, 22, username, passwd, timeout=5)
        for cmd in cmds:
            stdin, stdout, stderr = client.exec_command(cmd)
            lines = stdout.readlines()
            # print out
            for line in lines:
                print line,
        print '%s\t 运行完毕\r\n' % (ip)
    except Exception, e:
        print '%s\t 运行失败,失败原因\r\n%s' % (ip, e)
    finally:
        client.close()

#上传文件       
defuploadFile(ip,username,passwd):
    try:
        t=paramiko.Transport((ip,22))
        t.connect(username=username,password=passwd)
        sftp=paramiko.SFTPClient.from_transport(t)
        remotepath='/root/main.py'
        localpath='/home/data/javawork/pythontest/src/main.py'
        sftp.put(localpath,remotepath)
        print '上传文件成功'
    except Exception, e:
        print '%s\t 运行失败,失败原因\r\n%s' % (ip, e)
    finally:
        t.close()

#下载文件 
defdownloadFile(ip,username,passwd):
    try:
        t=paramiko.Transport((ip,22))
        t.connect(username=username,password=passwd)
        sftp=paramiko.SFTPClient.from_transport(t)
        remotepath='/root/storm-0.9.0.1.zip'
        localpath='/home/data/javawork/pythontest/storm.zip'
        sftp.get(remotepath,localpath)
        print '下载文件成功'
    except Exception, e:
        print '%s\t 运行失败,失败原因\r\n%s' % (ip, e)
    finally:
        t.close()  
        
if __name__ == '__main__':
    # 需要执行的命令列表
    cmds = ['ls /root', 'ifconfig']
    # 需要进行远程监控的服务器列表
    servers = ['xxx.xxx.xxx.xxx']
     
    username = "root"
    passwd = "xxxxxx"
    threads = []
    print "程序开始运行%s" % datetime.datetime.now()
    # 每一台服务器创建一个线程处理
    for server in servers:
        th = threading.Thread(target=sshCmd, args=(server, username, passwd, cmds))
        th.start()
        threads.append(th)
         
    # 等待线程运行完毕
    for th in threads:
        th.join()
         
    print "程序结束运行%s" % datetime.datetime.now()
    
    #测试文件的上传与下载
    uploadFile(servers[0],username,passwd)
    downloadFile(servers[0],username,passwd)

 

Secure File Transfer Using SFTPClient

SFTPClient is used to open an sftp session across an open ssh Transport and do remote file operations.

An SSH Transport attaches to a stream (usually a socket), negotiates an encrypted session, authenticates, and then creates stream tunnels, called Channels, across the session. Multiple channels can be multiplexed across a single session (and often are, in the case of port forwardings).

 

以下是用密码认证功能登录的

#!/usr/bin/env python

import paramiko

 

socks=('127.0.0.1',22)

testssh=paramiko.Transport(socks)

testssh.connect(username='root',password='000000')

sftptest=paramiko.SFTPClient.from_transport(testssh)

remotepath="/tmp/a.log"

localpath="/tmp/c.log"

sftptest.put(remotepath,localpath)

sftptest.close()

testssh.close()

 

以下是用DSA认证登录的(PubkeyAuthentication)
#!/usr/bin/env python

import paramiko

 

serverHost = "192.168.1.172"

serverPort = 22

userName = "root"

keyFile = "/root/.ssh/zhuzhengjun"

known_host = "/root/.ssh/known_hosts"

channel = paramiko.SSHClient();

#host_keys = channel.load_system_host_keys(known_host)

channel.set_missing_host_key_policy(paramiko.AutoAddPolicy())

channel.connect(serverHost, serverPort,username=userName, key_filename=keyFile )

testssh=paramiko.Transport((serverHost,serverPort))

mykey = paramiko.DSSKey.from_private_key_file(keyFile,password='xyxyxy')

testssh.connect(username=userName,pkey=mykey)

sftptest=paramiko.SFTPClient.from_transport(testssh)

filepath='/tmp/e.log'

localpath='/tmp/a.log'

sftptest.put(localpath,filepath)

sftptest.close()

testssh.close()

 

以下是用RSA Key认证登录的

#!/usr/bin/evn python

 

import os

import paramiko

 

host='127.0.0.1'

port=22

testssh=paramiko.Transport((host,port))

privatekeyfile = os.path.expanduser('~/.ssh/badboy')

mykey = paramiko.RSAKey.from_private_key_file(privatekeyfile,password='000000')

username = 'root'

testssh.connect(username=username, pkey=mykey)

sftptest=paramiko.SFTPClient.from_transport(testssh)

filepath='/tmp/e.log'

localpath='/tmp/a.log'

sftptest.put(localpath,filepath)

sftptest.close()

testssh.close()

 

另一种方法:

 

在paramiko中使用用户名和密码通过sftp传输文件,不使用key文件。

import getpass

import select

import socket

import traceback

import paramiko

def putfile():

    #import interactive

    # setup logging

    paramiko.util.log_to_file('demo.log')

    username = username

    hostname = hostname

    port = 22

    # now connect

    try:

        sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

        sock.connect((hostname, port))

    except Exception, e:

        print '*** Connect failed: ' + str(e)

        traceback.print_exc()

        sys.exit(1)

    t = paramiko.Transport(sock)

    try:

        t.start_client()

    except paramiko.SSHException:

        print '*** SSH negotiation failed.'

        sys.exit(1)

    keys = {}

    # check server's host key -- this is important.

    key = t.get_remote_server_key()

    # get username

    t.auth_password(username, password)

    sftp = paramiko.SFTPClient.from_transport(t)

    # dirlist on remote host

    d=datetime.date.today()-datetime.timedelta(1)

    sftp.put(localFile,serverFile)

         sftp.close()

    t.close()

 

使用DSA认证登录的(PubkeyAuthentication)

 

#!/usr/bin/env python

 

import socket

import paramiko

import os

 

username='root'

hostname='192.168.1.169'

port = 22

 

sock=socket.socket(socket.AF_INET, socket.SOCK_STREAM)

sock.connect((hostname, port))

 

t=paramiko.Transport(sock)

t.start_client()

key=t.get_remote_server_key()

#t.auth_password(username,'000000')

privatekeyfile = os.path.expanduser('/root/.ssh/zhuzhengjun')

mykey=paramiko.DSSKey.from_private_key_file(privatekeyfile,password='061128')

t.auth_publickey(username,mykey)

sftp=paramiko.SFTPClient.from_transport(t)

sftp.put("/tmp/a.log","/tmp/h.log")

sftp.close()

t.close()

 

使用RSA Key验证

#!/usr/bin/env python

 

import socket

import paramiko

import os

 

username='root'

hostname='127.0.0.1'

port = 22

 

sock=socket.socket(socket.AF_INET, socket.SOCK_STREAM)

sock.connect((hostname, port))

 

t=paramiko.Transport(sock)

t.start_client()

key=t.get_remote_server_key()

#t.auth_password(username,'000000')

privatekeyfile = os.path.expanduser('~/.ssh/badboy')

mykey=paramiko.RSAKey.from_private_key_file(privatekeyfile,password='000000')

t.auth_publickey(username,mykey)

sftp=paramiko.SFTPClient.from_transport(t)

sftp.put("/tmp/a.log","/tmp/h.log")

sftp.close()

t.close()

 

分享到:
评论

相关推荐

    netmiko, 简化 Paramiko SSH连接至网络设备的多厂商库.zip

    netmiko, 简化 Paramiko SSH连接至网络设备的多厂商库 Netmiko简化 Paramiko SSH连接至网络设备的多厂商库python 2.7,3.5,3.6需要:Paramiko> = 2scp> = 0.10.0pyyamlpyserialtextfs

    python使用paramiko实现ssh的功能详解

    Python中的Paramiko库是一个强大的SSH2协议库,它支持加密和认证等功能,使得开发者能够方便地在Python程序中实现远程服务器的自动化管理。本篇文章将详细介绍如何使用Paramiko实现SSH的功能,包括基于用户名和密码...

    解决Python paramiko 模块远程执行ssh 命令 nohup 不生效的问题

    Python – paramiko 模块远程执行ssh 命令 nohup 不生效的问题解决 1、使用 paramiko 模块ssh 登陆到 linux 执行nohup命令不生效 # 执行命令 def command(ssh_config, cmd, result_print=None, nohup=False): ssh ...

    paramiko执行命令超时的问题.pdf

    文章还提供了具体的操作步骤和脚本示例,帮助理解如何使用paramiko进行远程命令执行,并处理执行超时问题。编写测试脚本,包括一个长时间运行的`test.sh`脚本和一个触发它的`run.sh`脚本。然后,通过paramiko的`test...

    paramiko,SSH,Python

    3. **连接建立与关闭**:Paramiko可以轻松地建立到远程服务器的SSH连接,支持基于密码、公钥或密钥对的身份验证。连接建立后,可以执行命令、上传/下载文件,甚至转发本地或远程端口。 4. **SFTP支持**:SSH File ...

    paramiko-expect:用于Paramiko SSH库的类似Python期望的扩展,它还支持跟踪日志

    Paramiko Expect为Paramiko SSH库提供了一个类似于期望的扩展,该脚本库允许脚本通过真正的SSH连接与主机进行完全交互。 该类由SSH客户端对象构造(将来可能会扩展为支持传输,以提供更大的灵活性)。 快速开始 要...

    Python paramiko模块的使用示例

    paramiko模块提供了ssh及sft进行远程登录服务器执行命令和上传下载文件的功能。这是一个第三方的软件包,使用之前需要安装。 1 基于用户名和密码的 sshclient 方式登录 # 建立一个sshclient对象 ssh = paramiko.SSH...

    python通过paramiko复制远程文件及文件目录到本地

    paramiko是用python写的一个模块,遵循SSH2协议,支持以加密和认证的方式,进行远程服务器的连接。利用该模块,可以方便的进行ssh连接和sftp协议进行sftp文件传输以及远程命令执行。 安装paramiko也很简单,我用的...

    python使用paramiko实现ssh的功能详解.docx

    通过上述示例可以看出,`paramiko`模块为Python提供了一种灵活而强大的方式来实现SSH功能。无论是简单的命令执行还是复杂的文件传输,甚至是更高级的安全认证机制,`paramiko`都能够很好地满足需求。在实际应用中,...

    使用Python paramiko模块利用多线程实现ssh并发执行操作

    有了Paramiko以后,我们就可以在Python代码中直接使用SSH协议对远程服务器执行操作,而不是通过ssh命令对远程服务器进行操作。 由于paramiko属于第三方库,所以需要使用如下命令先行安装 2.安装paramiko pip install...

    python paramiko实现ssh远程访问的方法

    #设置ssh连接的远程主机地址和端口t=paramiko.Transport((ip,port))#设置登录名和密码t.connect(username=username,password=password)#连接成功后打开一个channelchan=t.open_session()#设置会话超时时间chan....

    ubuntu下paramiko安装

    ssh = paramiko.SSHClient() ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) ssh.connect('hostname', username='username', password='password') stdin, stdout, stderr = ssh.exec_command('ls -l'...

    python2.7 paramiko安装包

    在Python脚本中,我们可以通过以下简单示例了解如何使用Paramiko进行SSH连接: ```python import paramiko ssh = paramiko.SSHClient() ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) ssh.connect('...

    python使用paramiko模块通过ssh2协议对交换机进行配置的方法

    Python作为一个强大的脚本语言,被广泛用于网络管理任务,尤其是通过SSH (Secure Shell) 协议与远程设备进行交互。Paramiko是一个纯Python实现的SSHv2协议库,它提供了客户端和服务器端的功能,使得在Python中进行...

    Python3 SSH远程连接服务器的方法示例

    下载paramiko 首先,我的windows系统上有python2和python3。使用下面命令切换到python3: activate py3 接着使用下面命令下载相关模块: pip install ecdsa pip install Crypto ...ssh = paramiko.SSHClient

    pyssh_connect:适用于Paramiko SSH的基本python包装器

    pyssh连接pyssh-connect软件包提供了用于使用Paramiko执行SSH命令的基本接口。用法import pyssh_connectwith pyssh_connect . ssh_connection ( "host1.example.com" ) as ssh : returncode , output , error = ssh ...

    python paramiko+pycrypto

    Python中的Paramiko库是一个强大的SSH2协议库,它实现了客户端和服务器端的SSH协议,用于在不同系统之间进行安全的远程命令执行、文件传输等操作。Paramiko这个名字来源于瑞典语“parametrisk”(参数化的),它强调...

Global site tag (gtag.js) - Google Analytics