我将编写第一个用于在 python 上处理 ssh 命令的代码,我确实搜索了 stackoverflow,可以看到有几个 python 库可用于处理通过 ssh 传递的命令,例如paramiko、pexpect和其他一些。
特别是,我需要从远程服务器读取文件内容,通过 ssh/scp 复制文件,在远程服务器上启动脚本后从远程服务器获取输出。
也许一些专家可以建议哪个库更好并指定优点或缺点?
由于您在协议级别没有做任何特别的事情,因此您可能不需要完全在 python 中实现该协议,您可以使用该subprocess
模块简单地运行 ssh/scp 命令。
import subprocess
subprocess.check_call(['ssh', 'server', 'command'])
subprocess.check_call(['scp', 'server:file', 'file'])
库,包装器:
#!/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) 利用 2) 并提供一些更高级别的功能。如果后者适合您的要求,我建议您尝试 1)
更新:1)现在不见了(2017-09-12)
http://media.commandline.org.uk/code/ssh.txt(示例用法: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()
注意:上面的代码示例只是为了获得印象;代码未经测试。
试着看看Twisted Conch。它处理你想要的一切。如果你只是在寻找 SCP 风格的文件传输,你总是可以使用 python 模块secsh-filexfer。