python libraries for ssh handling

人盡茶涼 提交于 2019-12-03 03:11:43

问题


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?


回答1:


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.




回答2:


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'])



回答3:


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.




回答4:


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



来源:https://stackoverflow.com/questions/1939107/python-libraries-for-ssh-handling

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!