하면 된다!!!

File Transfer - scp, rsync

프로그래밍/기타

 

서버 작업을 하다보면 서버와 서버 사이에 파일 전송 이슈가 있는 경우가 있다.

개인적으로 주로 SFTP나 FTP를 이용해서 파일을 전송했었는데... 요즘은 rsync 를 이용해서 파일 전송을 주로 하고 있습니다.

그중 많이 쓰이는 scp, rsync 에 대해서... 간단히 커맨드 정리 해둔다.

 

SCP (Secure Copy) 

ssh를 통해서 파일을 전송하는 도구로 서버에서 서버로 쌍방향 전송이 가능하다.

 

다른 장비로 파일 복사하기
scp -rp sourcedirectory user@dest:/path
-r means recursive
-p preserves modification times, access times, and modes from the original file.
scp *.pdf sean@123.12.1.123:/home/sean/download/
>> 모든 PDF 파일을 123.12.1.123 서버의 /home/sean/download 폴더로 복사
scp -rp ~/files sean@123.12.1.123:/home/sean/download/
>> files 폴더 이하에 있는 모든 파일을 123.12.1.123 서버의 /home/sean/download 폴더로 복사

 

다른 장비에서 파일 복사해오기
scp -rp user@dest:/path sourcedirectory
scp sean@123.12.1.123:/home/sean/download/*.pdf ./download
>> 123.12.1.123 서버의 /home/sean/download 폴더의 모든 PDF 파일을 ./download 폴더로 복사
scp -rp sean@123.12.1.123:/home/sean/download/ ~/files 
>> 123.12.1.123 서버의 /home/sean/download 폴더 하위의 모든 파일을 ~/files 폴더로 복사

참고로 파일명에 공백 등이 들어간 경우 " " 로 둘러싸주면 된다. ex) "abc file.txt" 

 

 

rsync

서버간에 파일을 동기화하는 도구이다. 이 또한 쌍방향 전송이 가능하다.

필자는 AWS에서 서버 관리를 주로 하고 있는데 인증 파일(.pem)을 이용해서 서버에 파일을 싱크할때 자주 사용하고 있다.

파일 싱크하기 (일반)
rsync -a -e ssh user@source-server:/source/ /dest/
rsync -a -e ssh /source/ user@source-server:/dest/

-a : archive mode (include a lot of default common options, including preserving symlinks)
-z : compress
-v : verbose : show files
-P : show progess as files done/remaining files
-e ssh : do rsync in ssh protocol
--delete : delete files in the destination that are not anymore in the source
rsync -avz -e ssh pi@123.12.1.123:download/ files/
>> 123.12.1.123 서버의 download 폴더의 파일을 ./files 폴더로 복사
rsync -avz -e ssh files/ pi@123.12.1.123:download/
>> ~/files 의 파일들을 123.12.1.123 서버의 /home/sean/download 폴더로 복사
인증서 파일 (.pem) 파일을 이용해서 싱크하기
sudo rsync -avzP -e "ssh -i /root/.ssh/my_certificate.pem" /source/ user@source-server:/dest/
sudo rsync -avzP -e "ssh -i /root/.ssh/my_certificate.pem" user@source-server:/source/ /dest/

 

[nodejs] AWS S3 file 관리하기

프로그래밍/Javascript

급작스럽게 AWS S3 에서 파일을 올리고, 내리고 관리할 일이 발생했는데 임시 작업 이라서 nodejs 를 이용해서 처리 하기로 결정했다.

개발했던 내용을 좀 정리 해둔다.

 

 

먼저 aws-sdk 를 설치해야한다.

 

$ npm install aws-sdk

 

간단하게 목록 조회, 업로드, 다운로드 함수 구현한 내용중 일부를 기록해 둔다~

const fs = require('fs');
const AWS = require('aws-sdk');

const s3 = new AWS.S3({
    accessKeyId: "Your API Access Key ID",
    secretAccessKey: "Your API Secret Access Key"
});

/**
 * Object List from AWS S3 bucket
 * @param {Bucket: XXX, Prefix: XXX, MaxKeys: xxx} params 
 */
const listObjects = params => {
    s3.listObjectsV2(params, function (err, data) {
        if (err) {
            console.log(err);
            throw err;
        } else {
            if (data != null && data != undefined) {
                let fileList = data.Contents;
                if (fileList != null && fileList.length > 0) {
                    fileList.forEach((fileInfo, idx) => {
                        console.log(fileInfo);
                    });
                }
            } else {
                console.log(params.Prefix, "is not exists.");
            }
        }
    });
}

listObjects({ Bucket: 'My Bucket Name', Prefix: "path/to/", MaxKeys: 1000 });

/**
 * Download file from AWS S3
 * @param {*} params 
 */
const downloadFile = params => {
    s3.getObject(params.downloadParams, function (s3Err, data) {
        if (s3Err) throw s3Err
        fs.writeFileSync(params.savePath, data.Body)
    console.log('file downloaded successfully')
    });
}

var downParams = {
    downloadParams: {
        Bucket: "My bucket name",
        Key: "My object key"
    },
    savePath: "/path/to/abcde.txt"
};
downloadFile(downParams);

/**
 * File Upload to AWS S3
 * @param {*} uploadInfo 
 */
const uploadFile = uploadInfo => {
    fs.readFile(uploadInfo.filePath, function(err, data) {
        if (err) throw err;
        const params = {
            Bucket: uploadInfo.Bucket,
            Key: uploadInfo.Key,
            Body: JSON.stringify(data, null, 2)
        };
        s3.upload(params, function (s3Err, uploadData) {
            if (s3Err) throw s3Err
            console.log(`File uploaded successfully at ${uploadData.Location}`)
        });
    });
}

uploadFile({
    Bucket: "My Bucket Name",
    Key: "upload path and object key",
    filePath: "/path/to/abcde.txt"
});

 

인도네시아에서 미성년자 아이 대한민국 여권 연장 프로세스

인도네시아/생활정보 & 에피소드

안녕하세요. 오랜만에 포스팅을 하네요.

 

첫째 아이가 어느덧 다섯살이 되었습니다. 정말 훌쩍 시간이 지나갔네요.

다섯살 하니 떠오른 것이... 앗~ 여권도 곧 만료되겠구나!!!

지난 주말 마스크 중무장 하고 아이를 데리고 사진관에 가서 여권 사진을 후다닥 찍고 돌아왔습니다.

 

여권이 만료되어서 신규로 발급을 받는 과정이라서 생각보다 필요한 서류가 별로 없었습니다.

 

1. 여권발급신청서 : 온라인에서 받아서 프린트 하셔서 작성해가면 대사관에서 굳이 서서 작성하고 있을 필요가 없고 빨리 끝납니다.

2. 법정 대리인 동의서 : 접수하실때 양식을 줍니다. 간단한 양식이라 금방 채울 수 있어요.

3. 여권 사진 2장 (6개월 이내에 촬영한 3.5cm x 4.5cm)

4. 아빠나 엄마 여권 원본 지참 : 확인후 돌려줌

5. 아이 여권 원본 지참 : 확인후 돌려줌, 아이 여권은 신규 여권 수령시 다시 가져가야 합니다.

6. 비용 : Rp 481,800 (현금 결재만 됨) 아이 여권은 10년짜리가 안되고 5년짜리만 발급됩니다. 따라서 대사관 안내문에 나온 금액과는 다릅니다.

 

이중국적자 아이의 경우에도 외국인 배우자의 여권이나 아이의 인니 여권이나 아피다핏 등 지참하실 필요 없습니다.

 

여권 발급 신청서에도 굳이 다 채우실 필요가 없어요.  상단에 기본 정보 넣고, 추가 기재란에도 최종 국내 주소만 넣으면 되었습니다.

9시 10분쯤 도착해서 4번 대기표를 받고, 2번 처리하고 계셨었는데 서류 확인하다가 바로 호출 되어서 줄서고 처리하는데 까지 5분도 안걸리더군요.

 

비용까지 납부 완료하면 영수증 주시는데 꼭 잘 보관하셨다가 2주쯤 (날짜 지정해줌) 후에 아이 구 여권 원본영수증 함께 지참하여 방문하면 신규 여권 수령 가능합니다.

1월 19일 신청하였는데 2월 4일 방문하라고 안내 받았습니다.

 

생각보다 너무 심플해서 크게 설명드릴 일이 없었네요.

 

그럼 모두 코로나 조심하시고, 즐거운 인도네시아 라이프 즐기시길 바래요.