• 使用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")
  • 相关阅读:
    sell02 展现层编写
    sell01 环境搭建、编写持久层并进行测试
    SpringBoot04 日志框架之Logback
    SpringBoot04 项目热部署详解
    SpringBoot03 项目热部署
    Angular14 利用Angular2实现文件上传的前端、利用springBoot实现文件上传的后台、跨域问题
    Flask17 Flask_Script插件的使用
    Angular13 Angular2发送PUT请求在后台接收不到参数
    PostMan安装
    unix网络编程环境配置程序运行
  • 原文地址:https://www.cnblogs.com/xiaoming279/p/6404289.html
Copyright © 2020-2023  润新知