zoukankan      html  css  js  c++  java
  • 使用paramiko远程登录并执行命令脚本

    #!/usr/bin/env python
    #coding=utf-8
    
    import paramiko, getpass,sys,traceback
    
    class ssh_utils():
        def login_by_passwd(self, ip, port, username, passwd):
            self.ip = ip
            self.port = port
            self.username = username
            self.passwd = passwd
            self.pkey = None
        
        def login_by_key(self, username, key_path, passwd):
            try:
                self.pkey=paramiko.RSAKey.from_private_key_file(key_path)
            except paramiko.PasswordRequiredException:
                if not passwd:
                    passwd = getpass.getpass('RSA key password: ')
                self.pkey = paramiko.RSAKey.from_private_key_file(key_path, passwd) 
             
        def ssh(self,shell):
            try:
                ssh = paramiko.SSHClient()
                ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
                if self.pkey:
                    ssh.connect(self.ip, self.port, self.username, compress = True, pkey= self.pkey)
                else:
                    if not self.passwd:
                        self.passwd = getpass.getpass('input password: ')
                    ssh.connect(self.ip,self.port,self.username, self.passwd)
                stdin, stdout, stderr = ssh.exec_command(shell)
                res = stdout.readlines()
                ssh.close()
                return res
            except:
                type, value, tb = sys.exc_info()
                return traceback.format_exception(type, value, tb)
            
        def scp(self,localpath,remotepath):
            try:
                t = paramiko.Transport((self.ip,self.port))
                if self.pkey:
                    t.connect(self.ip, self.port, self.username, pkey= self.pkey)
                else:
                    if not self.passwd:
                        self.passwd = getpass.getpass('input password: ')
                    t.connect(username = self.username, password = self.passwd)
                sftp = paramiko.SFTPClient.from_transport(t)
                sftp.put(localpath,remotepath)
                t.close()
                return "SCP OK"
            except:
                type, value, tb = sys.exc_info()
                return traceback.format_exception(type, value, tb)
    
    if __name__ == '__main__':
        #使用例子
        myssh = ssh_utils()
        myssh.login_by_passwd("23.83.25.18",222,"root","xiaoming.n5")
        ret = myssh.scp('/etc/fstab', '/tmp/')
        myssh.ssh("cd /tmp/ && tar -zcf fstab.tgz fstab")
  • 相关阅读:
    vue.js 源代码学习笔记 ----- html-parse.js
    vue.js 源代码学习笔记 ----- text-parse.js
    vue.js 源代码学习笔记 ----- keep-alives
    一些图片剪切组件.
    好听的粤语歌..
    jQuery框架Ajax常用选项
    form自动提交
    .NET EF 框架-实现增删改查
    简单抓取小程序大全,并展示
    C#关于调用微信接口的代码
  • 原文地址:https://www.cnblogs.com/xiaoming279/p/6404289.html
Copyright © 2011-2022 走看看