def putFile(cfg, sftp: sftp_client, fpath): '''Upload the file pointed by the absolute path fpath to the remote host that the sftp client connect to''' if args.verbose: print('Uploading: {}...'.format(os.path.basename(fpath))) finalPath = getRemotePath(cfg, fpath) createPath(cfg.get('file_path'), sftp) sftp.put(fpath, finalPath) return finalPath
def setFileOwner(cfg, sftp: sftp_client, sshClient: SSHClient, finalPath): stdin, stdout, stderr = execCmd(sshClient, "getent group {}".format( cfg.get('file_group'))) gid = int(stdout.read().split(b':')[2]) stdin, stdout, stderr = execCmd(sshClient, "id -u {}".format( cfg.get('file_user'))) stdout = stdout.read() uid = int(stdout) if args.verbose: print('Set file owner to {}:{}'.format(uid, gid)) sftp.chown(finalPath, uid, gid)
def set_file_owner(cfg: Config, sftp: sftp_client, ssh_client: SSHClient, final_path: str) -> None: group = None user = None if cfg.exists('file_group'): group = cfg.get_str('file_group') else: group = cfg.get_str('ssh_user') if cfg.exists('file_user'): user = cfg.get_str('file_user') else: user = cfg.get_str('ssh_user') stdin, stdout, stderr = execCmd(ssh_client, "id -g {}".format(group)) stdout = stdout.read() gid = int(stdout) stdin, stdout, stderr = execCmd(ssh_client, "id -u {}".format(user)) stdout = stdout.read() uid = int(stdout) log('Set file owner to {}:{}'.format(uid, gid)) sftp.chown(final_path, uid, gid)
def createPath(path, sftp: sftp_client): '''Create missing directories in path and change directory to that path''' if path == '/': sftp.chdir('/') return if path == '': return try: sftp.chdir(path) except IOError: dirname, basename = os.path.split(path.rstrip('/')) createPath(dirname, sftp) sftp.mkdir(basename) sftp.chdir(basename) return True
def create_path_then_cd(path: str, sftp: sftp_client): '''Create missing directories in provided path and change directory to that path''' if path == '/': sftp.chdir('/') return if path == '': return try: sftp.chdir(path) except IOError: dirname, basename = os.path.split(path.rstrip('/')) create_path_then_cd(dirname, sftp) sftp.mkdir(basename) sftp.chdir(basename) return True
def put_file(cfg: Config, sftp: sftp_client, fpath: str, verbose=False) -> str: '''Upload the file pointed by the absolute path fpath to the remote host that the sftp client connect to''' final_path = get_remote_path(cfg, fpath) create_path_then_cd(cfg.get_str('file_path'), sftp) log('Uploading: {}...'.format(os.path.basename(fpath))) if verbose: bar = [None] try: sftp.put(fpath, final_path, callback=lambda x, y: log_progress(x, y, bar)) if bar[0]: bar[0].finish() except KeyboardInterrupt: logging.warning('Aborded, cleaning remote file') sftp.remove(final_path) raise KeyboardInterrupt else: sftp.put(fpath, final_path) return final_path
def set_file_mode(sftp: sftp_client, final_path: str, mode: str) -> None: log('Changing permissions to {}'.format(mode)) fmode = int(mode, 8) sftp.chmod(final_path, fmode)
def setFileMode(sftp: sftp_client, finalPath, mode): if args.verbose: print('Changing permissions to {}'.format(mode)) fmode = int(mode, 8) sftp.chmod(finalPath, fmode)