paramiko是一个用python编写的实现了SSHv2协议的工具.现在许多自动化工具都调用了paramiko用来管理服务器主机.比如流行的Ansible和Fabric都使用了paramiko.它本身同时提供了客户端和服务器端的功能,底层调用了Python的C扩展模块PyCrypto,而paramiko本身是用纯Python实现的.
首先安装paramiko:
# pip install paramiko
# python
Python 2.7.10 (default, May 23 2015, 09:40:32) [MSC v.1500 32 bit (Intel)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> import paramiko
>>> print paramiko.__version__
1.16.0
>>>
如果上面的信息能正确显示出来,那就说明已经成功安装上了paramiko模块在你的python中
1.在远程客户机上执行命令
在自动化工具建设过程中我们通常需要在远程客户机或客户机集群上执行一些命令来达到我们的业务需求,最原始的情况下我们功过ssh工具(如xshell,putty)来对被管理机器进行连接登陆后直接进行操作,而使用paramiko提供的方案可以让我们方便的通过脚本实现上述操作.
import paramiko
sshclient = paramiko.SSHClient()
sshclient.set_missing_host_key_policy(paramiko.AutoAddPolicy())
sshclient.connect(
hostname="192.168.157.2",
username="root",
password="root",
timeout=10
)
stdin, stdout, stderr = sshclient.exec_command("ls /")
print stdout.read()
sshclient.close()
脚本先创建了一个SSHClient对象来进行连接,其中set_missing_host_key_policy是在缺失密钥对象或者文件时设定的策略,官方API是这样写的:Set the policy to use when connecting to a server that doesn’t have a host key in either the system or local HostKeys objects.默认策略是拒绝,这里如果我们没有制定连接主机的私钥我们默认会被拒绝连接的,所以需要设置自动添加密钥策略来实现,在这段脚本中也可以使用MissingHostKeyPolicy,效果是相同的
接下来进行连接需要设置连接的参数,这里设置成你们需要执行远程命令的参数即可,通过exec_command来实现执行一个远程命令,同时返回标准输入,标准输出,错误输出这三个文件描述符,我们这里执行了一条简单的命令来测试整个过程,所以只需要读取标准输出中的内容即可.
执行结果:
bin boot dev etc home lib lib64 lost+found mnt opt proc root run sbin srv sys tmp usr var
有时我们还有将本地文件上传到远端被控机的需要,paramiko也提供了sftp的方式传输文件,我们这里试验一下调用它的api来上传本地文件
import paramiko
sshclient = paramiko.SSHClient()
sshclient.set_missing_host_key_policy(paramiko.MissingHostKeyPolicy())
sshclient.connect(
hostname="192.168.157.2",
username="root",
password="root",
timeout=10
)
stdin, stdout, stderr = sshclient.exec_command("mkdir /root/remoteTest")
sftpclient = sshclient.open_sftp()
sftpclient.put("E:/test.txt", "/root/remoteTest/text.txt")
stdin, stdout, stderr = sshclient.exec_command("ls -l /root/remoteTest")
print stdout.read()
sftpclient.close()
sshclient.close()
同样的我们可以通过刚才创建的连接对象来打开一个sftp服务器实现文件的上传,执行结果如下:
total 4
-rw-r--r-- 1 root root 5 Jan 31 03:02 text.txt
同样sftp服务器也提供了get方法将文件从远程机器下载到本地机器
更多关于paramiko的细节请查看其官方文档 http://docs.paramiko.org/en/latest/