SSH实现远程文件修改

import paramiko

from ws.base_ws import BaseWs

REMOTE_PROPERTIES_FILE = '远程路径/application.properties'
LOCAL_PROPERTIES_FILE = 'application.properties'

class OPConfigFile:
    @staticmethod
    def modify_ymp_config_file(key, new_value):
        """
        功能:修改配置文件application.properties
        参数:key:配置文件application.properties中需要修改的键
             new_value:修改的值
        """
        # 远程主机信息'
        hostname = host
        port = port
        username = user
        password = passwd

        # 创建SSH对象
        ssh = paramiko.SSHClient()
        ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())  # 自动添加主机密钥

        try:
            # 建立SSH连接
            ssh.connect(hostname, port, username, password)

            # 使用SFTP客户端
            sftp = ssh.open_sftp()

            # 下载远程.properties文件
            sftp.get(REMOTE_PROPERTIES_FILE, LOCAL_PROPERTIES_FILE)

            # 关闭SFTP连接
            sftp.close()

            # 读取并修改本地.properties文件
            with open(LOCAL_PROPERTIES_FILE, 'r', encoding='utf-8') as file:
                lines = file.readlines()

            # 修改配置项,例如将key=value修改为key=new_value
            with open(LOCAL_PROPERTIES_FILE, 'w', encoding='utf-8') as file:
                for line in lines:
                    if key in line:
                        # 假设我们要修改的键是'key',新的值是'new_value'
                        line = f'{key}={new_value}\n'
                    file.write(line)

            # 重新建立SFTP连接进行上传
            sftp = ssh.open_sftp()

            # 上传修改后的文件到远程主机
            sftp.put(LOCAL_PROPERTIES_FILE, REMOTE_PROPERTIES_FILE)

            # 关闭SFTP连接
            sftp.close()
            print(f"Updated '{REMOTE_PROPERTIES_FILE}' on {hostname} successfully.")

            ssh.exec_command("chmod 777 远程路径/application.properties ; sed -i 's/\r//g' 远程路径/application.properties") #文件修改权限及centos文件格式化,windows、centos系统上字符表现不同

            stdin, stdout, stderr = ssh.exec_command("sh 远程路径/app.sh restart")
            # 读取输出和错误
            print(stdout.read().decode())
            if stderr.read().decode():
                print("命令执行出错:", stderr.read().decode())

        except Exception as e:
            print(f"An error occurred: {e}")

        finally:
            ssh.close()  # 无论是否发生异常,都关闭SSH连接

    @staticmethod
    def get_ymp_config_file_value_by_key(keyName):

        # 远程主机信息
        hostname = host
        port = port1
        username = user
        password = passwd


        # 创建SSH对象
        ssh = paramiko.SSHClient()
        ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())  # 自动添加主机密钥

        try:
            # 建立SSH连接
            ssh.connect(hostname, port, username, password)

            # 使用SFTP客户端
            sftp = ssh.open_sftp()

            # 下载远程.properties文件
            sftp.get(REMOTE_PROPERTIES_FILE, LOCAL_PROPERTIES_FILE)

            # 关闭SFTP连接
            sftp.close()

            # 读取本地.properties文件
            properties = {}
            with open(LOCAL_PROPERTIES_FILE, 'r', encoding='utf-8') as file:
                for line in file:
                    # 忽略注释和空行
                    if line.strip() and not line.strip().startswith('#'):
                        key, value = line.strip().split('=', 1)
                        properties[key.strip()] = value.strip()

            # print("_______________properties:",properties)
            # print(f"_______________key:{keyName},properties:{properties[keyName]}")
            return properties[keyName]
        except Exception as e:
            print(f"An error occurred: {e}")

        finally:
            # 无论是否发生异常,都关闭SSH连接
            ssh.close()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值