Sftp put 명령어 - Sftp put myeonglyeong-eo

sFTP (보안 파일 전송 프로그램)는 FTP (파일 전송 프로토콜)와 유사한 방식으로 작동하는 안전한 대화 형 파일 전송 프로그램입니다. 그러나 sFTP는 FTP보다 안전합니다. 암호화 된 SSH 전송을 통해 모든 작업을 처리합니다.

공개 키 인증 및 압축과 같은 몇 가지 유용한 SSH 기능을 사용하도록 구성 할 수 있습니다. 지정된 원격 시스템에 연결 및 로그인하고 사용자가 다양한 명령을 실행할 수있는 대화 형 명령 모드로 전환합니다.

이 기사에서는 sFTP를 사용하여 전체 디렉토리 (하위 디렉토리 및 하위 파일 포함)를 업로드/다운로드하는 방법을 보여줍니다.

sFTP를 사용하여 Linux에서 파일 / 디렉토리를 전송하는 방법

기본적으로 SFTP는 원격 서버에 대한 보안 연결을 설정하기 위해 동일한 SSH 전송을 채택합니다. 기본 SSH 설정과 유사하게 사용자를 인증하는 데 비밀번호가 사용되지만, 원격 호스트에 대한보다 간단하고 안전한 연결을 위해 SSH 비밀번호없는 로그인을 생성하고 사용하는 것이 좋습니다.

원격 sftp 서버에 연결하려면 먼저 보안 SSH 연결을 설정 한 다음 그림과 같이 SFTP 세션을 생성합니다.

$ sftp [email protected]

원격 호스트에 로그인하면 아래 예제와 같이 대화 형 sFTP 명령을 실행할 수 있습니다.

sftp> ls #list directory sftp> pwd #print working directory on remote host sftp> lpwd #print working directory on local host sftp> mkdir uploads #create a new directory

전체 디렉토리를 원격 Linux 호스트에 업로드하려면 put 명령을 사용하십시오. 그러나 아래 스크린 샷과 같이 원격 호스트의 작업 디렉토리에 디렉토리 이름이 없으면 오류가 발생합니다.

따라서 로컬 호스트에서 업로드하기 전에 먼저 원격 호스트에 동일한 이름으로 디렉토리를 생성합니다. \u003ccode\u003e -r \u003c/ code\u003e가 마법을 수행하여 하위 디렉토리와 하위 파일도 복사 할 수 있도록합니다.

sftp> put -r Tecmint.com-articles sftp> mkdir Tecmint.com-articles sftp> put -r Tecmint.com-articles

전송 된 원본 파일의 수정 시간, 액세스 시간 및 모드를 보존하려면 \u003ccode\u003e -p \u003c/ code\u003e 플래그를 사용하십시오.

sftp> put -pr Tecmint.com-articles

원격 Linux 호스트에서 로컬 머신으로 fstools-0.0이라는 전체 디렉토리를 다운로드하려면 다음과 같이 \u003ccode\u003e -r \u003c/ code\u003e 플래그와 함께 get 명령을 사용합니다.

sftp> get -r fstools-0.0

그런 다음 디렉토리가 모든 내용과 함께 다운로드 된 경우 로컬 호스트의 현재 작업 디렉토리를 확인합니다.

sFTP 쉘을 확인하려면 다음을 입력하십시오.

sftp> bye OR sftp> exit

또한 sFTP 명령 및 사용 팁을 읽으십시오.

보안상의 이유로 사용자가 원격 호스트의 전체 파일 시스템에 액세스하지 못하도록 차단하려면 chroot Jail을 사용하여 sFTP 사용자를 홈 디렉토리로 제한 할 수 있습니다.

그게 다야! "이 기사에서는 sFTP를 사용하여 전체 디렉토리를 업로드/다운로드하는 방법을 설명했습니다. 아래 댓글 섹션을 사용하여이 기사/주제에 대한 의견을 제공하십시오.

프로젝트를 하나 하고 있는데 이미지 전송을 서버끼리 할 필요가 있어서 적용해본 김에 정리합니다.
vscode에서 drag and drop으로 옮기거나, filezilla 등의 gui 툴을 이용할 수 있지만 cli가 적응하면 훨씬 편하고 vscode 같은 경우엔 전송 속도가 너무 느려서 불편합니다. command를 알아보고 테스트하면서 깨달은 바를 나름대로 정리했습니다.
잘못된 정보가 있을 경우에는 댓글로 알려주세요!

[참고]

제가 테스트한 환경은 local은 windows os이고, key파일을 통해 linux 서버에 접속하도록 되어 있습니다.
이 글에서는 파일 전송 명령어를 정리해놓은 것으로 자세한 개념정리 블로그는 아래에 링크 달아두겠습니다.
//nhj12311.tistory.com/76

기본적으로 서버에 authentication하는 방식이 key파일을 통해서 이루어지는 방식입니다. 따라서 key파일이 없으면 warning message를 받게 되지만 password를 통해서도 scp가 가능합니다.

1. 로컬-서버 간 파일 전송

로컬에서 서버로 파일 업로드

scp -P <port 번호> <local file path> <username>@<ip>:<path>

로컬 cmd에서 위와 같은 command를 입력해야 합니다. 포트 번호 디폴트는 22이지만 22가 아닌 다른 포트 번호를 사용할 경우 포트 번호를 지정해줘야 합니다.

서버에서 로컬로 파일 다운로드

scp -P <port 번호> <username>@<ip>:<path> <local file path>

upload, download의 순서만 바꿔주면 됩니다. 서버 먼저 local 다음. 마찬가지로 로컬 cmd에서 위와 같은 command를 입력해야 합니다.

위의 코드는 단일 파일 전송의 경우로, 디렉토리 전체를 전송하고 싶다면 -r 옵션을 주면 됩니다.

scp -r -P <port 번호> ...

2. 서버 간 파일 전송

로컬-서버 간 전송과는 크게 다를 것이 없습니다. 다만, serverA에서 serverB로 파일을 전송하거나 하는 경우에는 serverB에 authentication을 build해야 합니다. 따라서, serverB의 password를 알고 있어야 합니다. (처음엔 key파일이 존재하지 않는 것 관련하여 warning이 뜨고 여기서 yes를 누르게 되면, 이후 password를 요구합니다. 따라서 팀원들 간 unix password를 공유해야 합니다.)

엄청 보안이 좋은 방향인지는 확신할 수는 없으나...팀프로젝트 용도로는 얼추 사용 가능할 듯 싶습니다.

vscode 든 뭐든 ssh로 내 서버(serverA)에 접속 후, 다른 서버(serverB)로 데이터를 전송하고자 한다면 다음과 같이 scp 명령어를 사용하면 됩니다.

scp -P <port 번호> <serverA file path> <serverB_username>@<ip>:<path>

잘 보면 명령어는 동일합니다.다만 command를 내리는 환경이 로컬에서 서버로 바뀌었을 뿐입니다.
업로드 이외에도 다운로드도 서버 to 로컬 cmd와 동일합니다.

scp -P <port 번호> <serverB_username>@<ip>:<path> <serverA file path>

SFTP

ssh의 파일 전송 버전으로 sftp 명령어를 통해 수행할 수 있습니다. 포트 번호는 22로 디폴트 지정되어 있습니다. 역시 다른 포트 번호를 사용한다면 -P 옵션을 통해 포트 번호를 지정해야 합니다.

1. 로컬-서버

로컬 cmd에서 다음의 command를 입력합니다.

put (로컬에서 업로드)

sftp -P <port_num> <username>@<ip> put <filename_to_upload>

get (로컬로 다운로드)

sftp -P <port_num> <username>@<ip> get <filename_to_download>

2. 서버 간 파일 전송

ssh로 serverA(나의 서버)에 접속 후 다음의 command를 입력합니다.

sftp -P <port_num> <serverB_username>@<ip>

put과 get을 통해 업로드, 다운로드 하는 것은 똑같습니다. 다만 local 환경이 현재 내가 접속하고 있는 서버로 변경되었다고 생각하시면 됩니다.

개인적으로 sftp의 장점은

  1. 한 번 접속하면 업로드와 다운로드를 한번에 수행할 수 있다는 점 (scp의 경우에는 일회성? 이라는 느낌을 강하게 받았습니다)
  2. local과 target의 디렉토리 변경과 디렉토리 확인 등의 작업을 동시에 수행할 수 있기 때문에 편리하다는 점을 꼽을 수 있을 것 같습니다.

위에 언급한 장점 2의 경우에는 아래의 코드를 통해 조금 더 이해하기 수월할 것 같습니다.

ssh <serverA_username>@<ip> # serverA에 ssh 접속 sftp -P <port_num> <serverB_username>@<ip> # serverA에서 serverB로 sftp 접속 lls # serverA 환경의 ls를 수행 lcd <path># serverA 환경에서 cd를 수행 ls # serverB 환경의 ls를 수행 cd <path> # serverB 환경에서 cd를 수행

마무리

파일 전송 속도를 테스트해본 결과 대략 90MB/s (업로드)로 scp나 sftp 간 큰 차이는 없었습니다 (근소하게 sftp가 더 빠른 듯하지만, 오차범위 내라고 생각합니다).

어려운 건 없습니다. scp의 경우에는 파일 전송을 일방향으로만 해주기 때문에 업로드와 다운로드 모두 scp 의 구조입니다. 로컬과 서버 간 전송인가 서버와 서버 간 전송인가는 어떤 환경에서 scp command를 날려주느냐의 문제입니다. 또한 서버 간 파일 공유를 위해서는 키파일 혹은 password를 공유해야 할 것입니다.

sftp의 경우에는 파일 전송을 원하는 서버에 sftp 접속을 해준 후, put/get 등의 명령어를 통해 해당 서버와 파일을 주고 받을 수 있습니다. 다만, 로컬에서 파일 전송을 원한다면 로컬에서 sftp 접속을 해주면 될 것이고 서버에서 다른 서버로 파일 전송을 원한다면 서버에서 다른 서버로의 sftp 접속을 해주면 될 것입니다.

어디에서 file transfer 명령을 날려주느냐의 문제인 것 같습니다!

Toplist

최신 우편물

태그