paramiko模块提供了ssh及sft进行远程登录服务器执行命令和上传下载文件的功能。这是一个第三方的软件包,使用之前需要安装。
1、安装paramiko
pip3 install paramiko
2、paramiko使用:
在使用paramiko之前需要先导入该模块。
(1)paramiko基于密码连接服务器
1 #!/usr/bin/env python 2 # -*- coding: utf-8 -*- 3 4 '''基于用户名密码验证的连接''' 5 import paramiko 6 7 #创建SSH对象 8 ssh = paramiko.SSHClient() 9 10 #允许连接不在know_hosts文件中的主机(默认不在know_Hosts中的主机连接时,服务器有个yes确定,这里用这个就是应对点击yes) 11 ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) 12 13 #连接服务器 14 ssh.connect(hostname='192.168.22.132', port=22, username='test', password='123456') 15 16 while True: 17 cmd = input('>>:').strip() 18 if not cmd: continue 19 if cmd == 'q':break 20 #执行命令 21 stdin, stdout, stderr = ssh.exec_command(cmd) 22 23 #获取命令结果 24 result = list(filter(lambda x:x is not None,[stdout.read(),stderr.read()]))[0].decode('utf8') 25 if not result: 26 print(stderr.read().decode('utf8')) 27 else: 28 print(result) 29 30 #关闭连接 31 ssh.close()
(2)paramiko基于密码的ftp
1 #!/usr/bin/env python 2 # -*- coding: utf-8 -*- 3 4 import paramiko 5 6 transport = paramiko.Transport(('192.168.22.132', 22)) 7 transport.connect(username='test', password='123456') 8 9 sftp = paramiko.SFTPClient.from_transport(transport) 10 11 #将local.py上传到服务器/home/test/test.py 12 sftp.put('local.py', '/home/test/test.py') 13 14 #将remote_path.py 下载到本地local_path.py 15 sftp.get('remote_path.py', 'local_path.py') 16 17 transport.close()
(3)paramiko基于key文件连接服务器
1 #!/usr/bin/env python 2 # -*- coding: utf-8 -*- 3 4 import paramiko 5 6 private_key = paramiko.RSAKey.from_private_key_file('/home/auto/.shh/id_rsa') 7 8 #创建SSH对象 9 ssh = paramiko.SSHClient() 10 11 #允许连接不在know_hosts文件中的主机(第一次连接时存在的问题) 12 ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) 13 14 #连接服务器 15 ssh.connect(hostname='192.168.22.132', port=22, username='test', key=private_key) 16 17 #执行命令 18 stdin, stdout, stderr = ssh.exec_command('df') 19 20 #获取执行结果 21 result = filter(lambda x: x is not None,[stdout.read(),stderr.read()]).decode('utf8') 22 if not result: 23 print(stderr.read().decode('utf8')) 24 else: 25 print(result) 26 27 ssh.close()