Python paramiko

Python 的 paramiko 模块基于 SSH 连接远程服务器并执行操作

SSHClient

基于用户名密码连接

示例:

import paramiko

ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy)		# 自动将IP添加到 known_hosts 中
ssh.connect(hostname='', port=22, username='root', password='password')

stdin, stdout, stderr = ssh.exec_command('ls')	# 输入、输出、错误信息 / 执行的命令

result = stdout.read()	# 获取输出结果
if not result:
    result = stderr.read()	# 获取错误信息
print(result)

ssh.close()		# 关闭连接

如果 不使用ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy),且 known_hosts 中没有主机信息就会报错:

paramiko.ssh_exception.SSHException: Server 'localhost' not found in known_hosts

基于密钥对连接

通过用户名密码连接有许多问题,可以通过公钥私钥连接
连接前需要提前生成密钥对
示例:

import paramiko

private_key = paramiko.RSAKey.from_private_key_file('/Users/teihiroshibon/.ssh/id_rsa')		# 私钥文件地址
ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy)
ssh.connect(hostname='127', port=22, username='root', pkey=private_key)
stdin, stdout, stderr = ssh.exec_command('ifconfig')
result = stdout.read()
if not result:
    result = stderr.read()
print(result)
ssh.close()

SFTPClient

基于用户名密码连接

示例:


import paramiko
import os

transport = paramiko.Transport(('localhost', 22))
transport.connect(username='root', password='password')

sftp = paramiko.SFTPClient.from_transport(transport)
"""
upload
前面是要上传的文件,后面是上传的目标目录
"""
sftp.put('test.py', '/root/upload.py')

"""
download
前面是要下载的文件,后面是下载的目标目录
"""
sftp.get('/data/test/url_view.py', 'download.py')


transport.close()

基于密钥对连接

示例:


import paramiko

private_key = paramiko.RSAKey.from_private_key_file('/Users/teihiroshibon/.ssh/id_rsa')
transport = paramiko.Transport(('localhost', 22))
transport.connect(username='root', pkey=private_key)

sftp = paramiko.SFTPClient.from_transport(transport)

"""upload"""
sftp.put('event.py', '/data/test/upload.py')

"""download"""
sftp.get('/data/test/url_view.py', 'download.py')

transport.close()

posted on 2019-07-01 15:05  doubtful  阅读(434)  评论(0编辑  收藏  举报

导航