paramiko模块封装了ssh,sftp等连接方法,常用于程序构建ssh等连接
1. paramiko 连接ssh服务的简单使用
1.1 连接方式1
# -*- coding:utf-8 -*-# Author:Wong Duimport paramiko# 创建SSHClient对象ssh = paramiko.SSHClient()# 允许连接不在know_hosts的主机ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())# ssh连接服务器ssh.connect(hostname="10.0.0.105", port=22, username='Caiyun', password='123456')print("\033[32;1m连接成功了...\033[0m")# 获取命令的三个返回值标准输入、标准输出、标准错误输出stdin, stdout, stderr = ssh.exec_command('cats /etc/passwd')'''# low one# print(stdout.read().decode())# print(stderr.read().decode())# print(stdout.read().decode()) if stdout.read() else print(stderr.read().decode())''''''# low tworightout = stdout.read().decode()errorout = stderr.read().decode()print(rightout) if rightout else print(errorout)'''# High bigerightOut, errorOut = stdout.read(), stderr.read()result = rightOut if rightOut else errorOutprint(result.decode())ssh.close()
1.2 连接方式2
# -*- coding:utf-8 -*-# Author:Wong Duimport paramiko# 封装ssh连接和认证transport = paramiko.Transport(('10.0.0.105', 22))transport.connect(username='Caiyun', password='123456')# 创建sshClient对象ssh = paramiko.SSHClient()# 建立ssh连接ssh._transport = transportstdin, stdout, stderr = ssh.exec_command('cat /etc/passwd')rightOut, errorOut = stdout.read(), stderr.read()result = rightOut if rightOut else errorOut # 三元运算print(result.decode())
2. paramiko SFTP服务的简单使用
# -*- coding:utf-8 -*-# Author:Wong Duimport paramiko# 封装ssh连接和认证身份transport = paramiko.Transport( ('10.0.0.105', 22))transport.connect(username='Caiyun', password='123456')# 建立连接sftp = paramiko.SFTPClient.from_transport(transport)try: sftp.put('__init__.py', '/home/Caiyun/TEST/dfdsf')except Exception as e: print('\033[31;1mError\033[0m', e)transport.close()
3. 用key文件认证建立连接
import paramikossh = paramiko.SSHClient()private_key = paramiko.RSAKey.from_private_key_file('id_rsa')ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())ssh.connect(hostname='10.0.0.105', port=22, username='Caiyun', pkey=private_key)stdin, stdout, stderr = ssh.exec_command('df')rightOut, errorOut = stdout.read(), stderr.read()result = rightOut if rightOut else errorOutprint(result.decode())