在运维工作中,我们经常使用 ssh 工具远程登陆主机来执行命令,对系统进行维护。在python的自动化运维中,要执行系统命令,最方便的还是借助于 python 的 ssh 功能编写日常脚本,简化工作。下面我们说下这个工具。
import paramiko
开始看第一个例子,在远端机器上运行 ' iostat ' 命令获得远端机器的 I/O 信息。
如果出现了如下提示:
SSHException: Server 'IP地址' not found in known_hosts
是因为你登陆的SSH主机SSH加密方式为 ecdsa ,而我们需要的加密方式为 rsa ,因此我们要改变 SSH 的加密方式使用如下命令登录远端主机,记得在登录前清掉 ./.ssh/known_hosts的内容。
使用如下命令登录执行。
ssh -o HostKeyAlgorithms = ssh-rsa 用户名@主机名或IP
我们在python中实现上面的功能。
35 : 建立一个paramiko的 Transport 对象,名字叫 trans
36 : 建立对象的连接。
37 : 建立一个 prarmiko 的 SSHClient 对象
38 : 将建立好的对象指定为以上的连接 Transport 对象
39 : 将执行的命令输入到 标准输入 输出 和错误。
40 : 输出标准输出。
用完了应该使用 Transprot 对象关闭连接。 trans.close()
当然,我们也可以写成脚本执行。
既然我们可以执行命令,那么我们自然可以通过SSH下载文件。
先在远端机器的 /tmp/python 目录上建立5个文件用于实验。
写一个脚本把他们拉过来。
执行看结果
这里其实仅仅多了一个 paramiko.SFTPClient.from_transport 的对象。
最后通过 listdir 列出目录 get 命令拉过来。下载是 get 上传自然是 put 了。。
当然这只是简单的应用,有些需要 Key 的方法,大家可以去网上自己找。 多个key定义而已。有空在单开章节说这个吧。