本篇介绍通过python的paramiko模块实现SSH和SFTP功能。
安装
很简单,直接使用pip安装就好,如果没有pip,需要先安装pip,下面代码也会列出pip的安装方法。
> yum -y install epel-release # 安装epel
> yum install python-pip # 安装pip
> pip install paramiko # 安装paramiko
快速开始
paramiko的连接方式有两种,这里直接给出实例代码: 第一种方法,paramiko.SSHClient()函数
import paramiko
host = 'x.x.x.x'
port = 22
username = 'root'
password = None
timeout = 5
key = '/root/.ssh/id_rsa'
# 实现一个runcmd方法,远程执行命令,并返回结果。
def runcmd(ssh, cmd):
_, stdout, _ = ssh.exec_command(cmd)
return stdout.read().decode()
# 用with方法实现上下文管理,不用手动关闭连接。
with paramiko.SSHClient() as ssh:
# 允许连接不在know_hosts文件中的主机
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
# 配置秘钥
pkey = paramiko.RSAKey.from_private_key_file(key)
ssh.connect(host, port, username, pkey)
result = runcmd(ssh, 'hostname')
print(result)
with ssh.open_sftp() as sftp:
# put上传文件
sftp.put('1.txt', '1.txt')
print(sftp.listdir())
第二种方法,paramiko.Transport()函数
import paramiko
host = 'x.x.x.x'
port = 22
username = 'root'
password = None
timeout = 5
pkey = '/root/.ssh/id_rsa'
def runcmd(ssh, cmd):
_, stdout, _ = ssh.exec_command(cmd)
return stdout.read().decode()
with paramiko.Transport((host, port)) as transport:
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
pkey = paramiko.RSAKey.from_private_key_file(key)
transport.connect(username=username, pkey=pkey)
ssh = paramiko.SSHClient()
ssh._transport = transport
result = runcmd(ssh, 'hostname')
print(result)
with paramiko.SFTPClient.from_transport(transport) as sftp:
sftp.put('1.txt', '1.txt')
print(sftp.listdir())
参考
上面只是简单的上手实例,paramiko还支持很多的方法,这里就不一一举例了,实际使用请一定要参考官方文档,文档写的很清楚。 paramiko官方API文档:http://paramiko-docs.readthedocs.io