diff --git a/RLA/auto_ftp.py b/RLA/auto_ftp.py index f23bf9c..4a177b4 100644 --- a/RLA/auto_ftp.py +++ b/RLA/auto_ftp.py @@ -9,20 +9,21 @@ import pysftp -def ftp_factory(name, server, username, password, ignore=None): +def ftp_factory(name, server, username, password, port, ignore=None): if name == FTP_PROTOCOL_NAME.FTP: - return FTPHandler(ftp_server=server, username=username,password=password, ignore=ignore) + return FTPHandler(ftp_server=server, username=username,password=password, port=port, ignore=ignore) elif name == FTP_PROTOCOL_NAME.SFTP: - return SFTPHandler(sftp_server=server, username=username, password=password, ignore=ignore) + return SFTPHandler(sftp_server=server, username=username, password=password, port=port, ignore=ignore) else: raise NotImplementedError class FTPHandler(object): - def __init__(self, ftp_server, username, password, ignore=None): + def __init__(self, ftp_server, username, password, port, ignore=None): self.ftp_server = ftp_server self.username = username self.password = password + self.port=port self.ftp = self.ftpconnect() logger.info("login success.") self.ignore = ignore @@ -53,7 +54,7 @@ def ignore_match(self, files): def ftpconnect(self): ftp = FTP() ftp.set_debuglevel(0) - ftp.connect(self.ftp_server, 21, timeout=60) + ftp.connect(self.ftp_server, int(self.port), timeout=60) ftp.login(self.username, self.password) logger.warn("login succeed") return ftp @@ -140,10 +141,11 @@ def close(self): class SFTPHandler(FTPHandler): - def __init__(self, sftp_server, username, password, ignore=None): + def __init__(self, sftp_server, username, password, port, ignore=None): self.sftp_server = sftp_server self.username = username self.password = password + self.port = port self.sftp = self.sftpconnect() logger.info("login success.") self.ignore = ignore @@ -152,7 +154,9 @@ def __init__(self, sftp_server, username, password, ignore=None): self.__init_gitignore() def sftpconnect(self): - sftp = pysftp.Connection(self.sftp_server, username=self.username, password=self.password) + cnopts = pysftp.CnOpts() + cnopts.hostkeys = None + sftp = pysftp.Connection(self.sftp_server, username=self.username, port = int(self.port), password=self.password, cnopts=cnopts) logger.warn("login succeed") return sftp diff --git a/RLA/easy_log/tester.py b/RLA/easy_log/tester.py index a54f42c..ba7b2ed 100644 --- a/RLA/easy_log/tester.py +++ b/RLA/easy_log/tester.py @@ -354,7 +354,8 @@ def sync_log_file(self, skip_error=False): """ syn_log_file is an automatic synchronization function. It will send all log files (e.g., code/**, checkpoint/**, log/**, etc.) to your target server via the FTP protocol. - To run this function, you should add some configuration on SRG.private_config.py + To run this function, you should add some configuration on rla_config.yaml. + We transfer files in SFTP by setting cnopts.hostkeys=None for convenience which is not safe. SEND_LOG_FILE: boolean. denotes synchronization or not. ftp_server: target server ip address @@ -393,7 +394,8 @@ def send_data(ftp_obj): ftp = ftp_factory(name=self.private_config["REMOTE_SETTING"]['file_transfer_protocol'], server=self.private_config["REMOTE_SETTING"]["ftp_server"], username=self.private_config["REMOTE_SETTING"]["username"], - password=self.private_config["REMOTE_SETTING"]["password"]) + password=self.private_config["REMOTE_SETTING"]["password"], + port=self.private_config["REMOTE_SETTING"]["port"]) if self.private_config["REMOTE_SETTING"]['file_transfer_protocol'] == 'ftp': alternative_protocol = 'sftp' else: @@ -407,7 +409,8 @@ def send_data(ftp_obj): ftp = ftp_factory(name=alternative_protocol, server=self.private_config["REMOTE_SETTING"]["ftp_server"], username=self.private_config["REMOTE_SETTING"]["username"], - password=self.private_config["REMOTE_SETTING"]["password"]) + password=self.private_config["REMOTE_SETTING"]["password"], + port=self.private_config["REMOTE_SETTING"]["port"]) send_data(ftp_obj=ftp) logger.warn("sync: send success!") except Exception as e: