English 中文(简体)
python libraries for ssh handling
原标题:

I m going to write first code for handling ssh commands on python and I did search over the stackoverflow and can see that there are several python libraries that can be used for handling commands passed through ssh, like paramiko, pexpect and perhaps some others.

Particularly, I will need to read content of the files from the remote server, copy files through ssh/scp, get output from remote server after starting the script on remote server.

Perhaps some experts could advice what library is better and specify advantages or disadvantages?

最佳回答

Libraries, Wrappers:

  1. http://www.lag.net/paramiko/

    #!/usr/bin/env python
    import paramiko
    from contextlib import contextmanager
    host =  192.168.10.142 
    username =  slacker 
    password =  password 
    def create_ssh(host=host, username=username, password=password):
        ssh = paramiko.SSHClient()
        ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) 
        try:
           print "creating connection"
           ssh.connect(host, username=username, password=password)
           print "connected"
           yield ssh
        finally:
           print "closing connection"
           ssh.close()
           print "closed"
    

1) utilizes the 2) and provides some higher level functions. If the latter suit your requirements, I d suggest trying out 1)


Update: 1) is gone now (2017-09-12)

  1. http://media.commandline.org.uk/code/ssh.txt (example usage: https://zeth.net/archive/2008/05/29/sftp-python-really-simple-ssh/)

    s = ssh.Connection( example.com ,  warrior , password =  lennalenna )
    s.put( /home/warrior/hello.txt ,  /home/zombie/textfiles/report.txt )
    s.get( /var/log/strange.log ,  /home/warrior/serverlog.txt )
    s.execute( ls -l )
    s.close()
    

Note: The code examples above are provided just for getting an impression; the code is not tested.

问题回答

Since you re not doing anything special at the protocol level, you presumably don t need the protocol to be entirely implemented in python, and you could simply run ssh/scp commands using the subprocess module.

import subprocess
subprocess.check_call([ ssh ,  server ,  command ])
subprocess.check_call([ scp ,  server:file ,  file ])

The one feature that none of the above-discussed libraries provide is a concurrent connection to multiple servers.In today s age where system admins need to run commands on hundreds of servers,libraries which can handle parallel command execution are very important. The two libraries that I know of are :

  1. Trigger

  2. Parallel-SSH

Trigger is much more than a SSH wrapper and more of a networking library,it utilizes the Twisted core API to enable concurrent I/O operations.

Parallel-SSH is a library which is thin wrapper over Paramiko but uses Gevent under the hood to enable concurrent I/O operations

Try taking a look at Twisted Conch. It handles everything you want. If you were just looking for SCP-style file transfer, you could always use the python module secsh-filexfer.





相关问题
Can Django models use MySQL functions?

Is there a way to force Django models to pass a field to a MySQL function every time the model data is read or loaded? To clarify what I mean in SQL, I want the Django model to produce something like ...

An enterprise scheduler for python (like quartz)

I am looking for an enterprise tasks scheduler for python, like quartz is for Java. Requirements: Persistent: if the process restarts or the machine restarts, then all the jobs must stay there and ...

How to remove unique, then duplicate dictionaries in a list?

Given the following list that contains some duplicate and some unique dictionaries, what is the best method to remove unique dictionaries first, then reduce the duplicate dictionaries to single ...

What is suggested seed value to use with random.seed()?

Simple enough question: I m using python random module to generate random integers. I want to know what is the suggested value to use with the random.seed() function? Currently I am letting this ...

How can I make the PyDev editor selectively ignore errors?

I m using PyDev under Eclipse to write some Jython code. I ve got numerous instances where I need to do something like this: import com.work.project.component.client.Interface.ISubInterface as ...

How do I profile `paster serve` s startup time?

Python s paster serve app.ini is taking longer than I would like to be ready for the first request. I know how to profile requests with middleware, but how do I profile the initialization time? I ...

Pragmatically adding give-aways/freebies to an online store

Our business currently has an online store and recently we ve been offering free specials to our customers. Right now, we simply display the special and give the buyer a notice stating we will add the ...

Converting Dictionary to List? [duplicate]

I m trying to convert a Python dictionary into a Python list, in order to perform some calculations. #My dictionary dict = {} dict[ Capital ]="London" dict[ Food ]="Fish&Chips" dict[ 2012 ]="...

热门标签