1.什么是paramiko是什么? 基于ssh用于连接远程服务器做操作: 远程执行命令 上传文件

import paramiko 导入模块

#ssh username@ip #创建一个ssh对象 client = paramiko.SSHClient() 创建一个ssh对象,使用变量client 接收 #解决的问题:如果之前没有连接过的ip(主机),会出现 """ The authenticity of host '172.25.0.101 (172.25.0.101)' can't be established. ECDSA key fingerprint is 9d:37:08:8e:a4:ad:45:b5:eb:69:6f:d2:88:d3:da:8c. Are you sure you want to continue connecting (yes/no)? yes """ #自动选择yes client.set_missing_host_key_policy(paramiko.AutoAddPolicy()) #连接服务器 client.connect( hostname='172.25.0.101', username='root', password='redhat' ) #执行操作 #标准输入 标准输出 标准错误输出 stdin,stdout,stderr = client.exec_command('') #获取命令的执行结果 print(stdout.read().decode('utf-8'))

#关闭连接 client.close()

2.paramiko批量远程密码连接

当需要处理的主机比较多的时候,可以使用批量连接的方式。将需要连接的主机ip,用户名称以及密码等信息,按照固定的格式保存在文件中,通过读取文件中的内容实现批量自动连接进行操作。

主要步骤: 1 将上述的远程密码连接主机进行操作,定义成一个函数。 2 将需要批量连接处理的主机信息,写在文件中,文件对象也是一个可迭代的对象,使用循环遍历对所有的主机进行连接操作。

from paramiko.ssh_exception import
NoValidConnectionsError,AuthenticationException

def connect(cmd,hostname,user,password): import paramiko #创建一个ssh对象 client = paramiko.SSHClient() #解决的问题:如果之前没有连接过的ip(主机),会出现 client.set_missing_host_key_policy(paramiko.AutoAddPolicy()) try: # 连接的服务器 client.connect( hostname=hostname, username=user, password=password ) except NoValidConnectionsError as e: return '主机%s连接失败' %(hostname) except AuthenticationException as e: return '主机%s密码错误' %(hostname) except Exception as e: return '未知错误:',e

#执行操作
stdin,stdout,stderr = client.exec_command('hostname')
#获取命令的执行结果
print(stdout.read().decode('utf-8'))

#关闭连接
client.close()

if name == 'main': with open('hosts') as f: for line in f: # 172.25.0.250:root:dd hostname,username,password = line.strip().split(':') res = connect('pwd',hostname,username,password) print(hostname.center(50,'*')) print('主机名:',res)

3.paramiko基于公钥和私钥的连接

要注意的是:我们当前用户(执行此程序的用户)要免秘连接的一台主机、 用户拿到的是私钥 要连接的主机要挂载公钥

连接的前提是,需要提前将公钥放置被连接主机的指定用户~/.ssh 目录中。将私钥放置在客户端主机的指定用户~/.ssh 中 设置ssh服务公钥以及私钥

连接操作步骤与第一个所以密码连接基本一致,值守在连接主机的时候,不在使用密码,而是使用生成的私钥对象。

import paramiko client = paramiko.SSHClient() #创建一个私钥对象 private_key = paramiko.RSAKey.
from_private_key_file('/home/kiosk/.ssh/id_rsa') client.set_missing_host_key_policy(paramiko.AutoAddPolicy()) #连接服务器 client.connect( hostname='172.25.0.250', username='root', pkey=private_key ) #执行操作 #标准输入 标准输出 标准错误输出 stdin,stdout,stderr = client.exec_command('') #获取命令的执行结果 print(stdout.read().decode('utf-8')) #关闭连接 client.close()

4.paramiko基于用户和密码的上船和下载文件

import paramiko from paramiko import AuthenticationException,SSHException

def put(hostname,password,source_name,target_name): try: # 类似于ssh+ftp命令 #建立与远程主机的通道 tarnsport = paramiko.Transport((hostname,22)) #验证用户名和密码是否正确 tarnsport.connect(username='root',password=password) #根据创建并验证成功的通道 sftp = paramiko.SFTPClient.from_transport(tarnsport) except AuthenticationException as e: return '主机%s密码错误' %(hostname) except Exception as e: return '未知错误:',e else: # 上传文件 sftp.put(source_name,target_name) #下载文件 #sftp.get('/mnt/name')

finally:
    # 关闭两台主机建立的通道
    tarnsport.close()

put('172.25.254.250','dd','/etc/passwd','/mnt/172.25.254.250')