ITPub博客

首页 > 应用开发 > IT综合 > Python——SSHClient.py

Python——SSHClient.py

原创 IT综合 作者:brj880719 时间:2017-11-09 10:14:55 0 删除 编辑

自己封装好的远程连接的组件,后期会不断完善

1、为了更方便采集信息系统以及数据库的信息,我做了该组件

2、为了让语句执行更顺畅,位置不发生错乱,暂时采用time.sleep()的方式解决

3、对于第二点会想办法将方法完善,以希望大家多多提出宝贵建议

  1. #!/usr/bin/env python
  2. # coding:utf-8
  3. '''
  4. @author: Ryan Bai(白瑞钧)
  5. @license:
  6. @contact: brj880719@hotmail.com
  7. @file: SSHClient.py
  8. @create time: 2017/11/8 18:11
  9. @desc:
  10. '''
  11. import paramiko
  12. from paramiko.py3compat import u
  13. import time

  14. '''
  15. @attention: : ssh客户端使用
  16. @author: 白瑞钧
  17. @param date:
  18. '''
  19. class SSHClient(object):

  20.     '''
  21.     @attention: 关闭 ssh 链接
  22.     @author: 白瑞钧
  23.     @param ssh: ssh链接
  24.     '''
  25.     def close(self, ssh):
  26.         ssh.close()


  27.     '''
  28.     @attention: 创建 ssh 链接
  29.     @author: 白瑞钧
  30.     @param v_username: 用户名
  31.     @param v_password: 密码
  32.     @param v_ip: IP
  33.     @param v_port: 端口号
  34.     '''
  35.     def sshConnection(self, v_username, v_password, v_ip, v_port=22):
  36.         # 创建SSH对象
  37.         ssh = paramiko.SSHClient()

  38.         # 把要连接的机器添加到known_hosts文件中
  39.         ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())

  40.         # 连接服务器
  41.         ssh.connect(hostname=v_ip, port=v_port, username=v_username, password=v_password)

  42.         return ssh
  43.     # endregion


  44.     '''
  45.     @attention: 执行单条命令
  46.     @author: 白瑞钧
  47.     @param ssh: ssh链接
  48.     @param v_cmd: 需要执行的命令
  49.     '''
  50.     def sshExecByOne(self, ssh, v_cmd):
  51.         # 执行
  52.         stdin, stdout, stderr = ssh.exec_command(v_cmd)
  53.         result = stdout.read()
  54.         
  55.         if not result:
  56.             result = stderr.read()

  57.         return result.decode()


  58.     '''
  59.     @attention: 执行命令集
  60.     @author: 白瑞钧
  61.     @param ssh: ssh链接
  62.     @param l_cmd: 需要执行的命令集
  63.     @param exec_wait: 执行命令间隔时间
  64.     @param exit_wait: 退出等待时间
  65.     '''
  66.     def sshExecByMany(self, s, l_cmd, exec_wait, exit_wait):
  67.         ssh = s.invoke_shell()
  68.         # 执行
  69.         for v_cmd in l_cmd:
  70.             ssh.send(v_cmd)
  71.             ssh.send('\n')
  72.             time.sleep(exec_wait)
  73.             if v_cmd=='exit':
  74.                 time.sleep(exit_wait)

  75.         result = u(ssh.recv(9999))

  76.         return result


  77. if __name__ == '__main__':

  78.     getClient = SSHClient()
  79.     ssh = getClient.sshConnection('sys_admin', 'XSW@1qaz', '10.82.28.219')
  80.     l_cmd = ['sudo su - ',
  81.              'su - oracle',
  82.             'sqlplus / as sysdba',
  83.             u'select * from dual;',
  84.             'exit',
  85.              'df -h',
  86.              'exit']
  87.     result = getClient.sshExecByMany(ssh, l_cmd, 1, 1)
  88.     print(result)
  89.     getClient.close(ssh)

  90.     # getClient = SSHClient()
  91.     # ssh = getClient.sshConnection('sys_admin', 'XSW@1qaz', '10.82.28.219')
  92.     # result = getClient.sshExecByOne(ssh,'pwd')
  93.     # print(result)
  94.     # getClient.close(ssh)


来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/24851054/viewspace-2147009/ ,如需转载,请注明出处,否则将追究法律责任。

下一篇: Oracle 结构概况
请登录后发表评论 登录
全部评论

注册时间:2014-12-06

  • 博文量
    75
  • 访问量
    67554