OS/Linux - Ubuntu

[Linux - 리눅스 / Ubuntu - 우분투] 파일 송수신 FTP - vsFTPD, ftp 내부 명령

주누다 2015. 5. 6. 16:59
반응형

FTP

- 파일을 송수신할 때 사용하는 대표적인 방법이 'FTP'

- FTP 는 TCP/IP 프로토콜 중 5계층에 있는 프로토콜로,

  리눅스 뿐만 아니라 이 프로토콜에 따르는 다른 운영체제와도 파일을 주고 받을 수 있음



FTP 서버 설치하기

- 리눅스에서 사용하는 대표적인 FTP 서버는 'vsFTPD(very secure file transfer protocol daemon)

=============================================================

sjw@sjw-HP-Mini-110-3500:~$ sudo apt-get install vsftpd
패키지 목록을 읽는 중입니다... 완료
의존성 트리를 만드는 중입니다      
상태 정보를 읽는 중입니다... 완료
다음 패키지가 자동으로 설치되었지만 더 이상 필요하지 않습니다:
  linux-headers-3.13.0-32 linux-headers-3.13.0-32-generic
  linux-image-3.13.0-32-generic linux-image-extra-3.13.0-32-generic
Use 'apt-get autoremove' to remove them.
다음 새 패키지를 설치할 것입니다:
  vsftpd
0개 업그레이드, 1개 새로 설치, 0개 제거 및 3개 업그레이드 안 함.
111 k바이트 아카이브를 받아야 합니다.
이 작업 후 361 k바이트의 디스크 공간을 더 사용하게 됩니다.
받기:1 http://kr.archive.ubuntu.com/ubuntu/ trusty-updates/main vsftpd amd64 3.0.2-1ubuntu2.14.04.1 [111 kB]
내려받기 111 k바이트, 소요시간 0초 (587 k바이트/초)
패키지를 미리 설정하는 중입니다...
Selecting previously unselected package vsftpd.
(데이터베이스 읽는중 ...현재 260602개의 파일과 디렉터리가 설치되어 있습니다.)
Preparing to unpack .../vsftpd_3.0.2-1ubuntu2.14.04.1_amd64.deb ...
Unpacking vsftpd (3.0.2-1ubuntu2.14.04.1) ...
Processing triggers for man-db (2.6.7.1-1ubuntu1) ...
Processing triggers for ureadahead (0.100.0-16) ...
vsftpd (3.0.2-1ubuntu2.14.04.1) 설정하는 중입니다 ...
vsftpd start/running, process 4241
Processing triggers for ureadahead (0.100.0-16) ...
sjw@sjw-HP-Mini-110-3500:~$

=============================================================





FTP 서버 설정하기 

- vsftpd 는 텔넷처럼 슈퍼 데몬인 xinetd에 의해 동작하도록 설정할수도 있으나

  vsftpd 메뉴얼에 따르면 독자형으로 사용하도록 권고

 

1) vsftpd 는 설치할 때 이미 동작을 시작. vsfptd가 동작하는지 'ps' 명령으로 확인

=============================================================

sjw@sjw-HP-Mini-110-3500:~$ ps -ef | grep vsftpd
root      4241     1  0 15:52 ?        00:00:00 /usr/sbin/vsftpd
sjw       4319  2660  0 15:56 pts/4    00:00:00 grep --color=auto vsftpd
sjw@sjw-HP-Mini-110-3500:~$

=============================================================



2) ftp 서버가 정상적으로 동작하는지 확인.

- FTP 클라이언트를 이용하여 접속할 수도 있지만 telnet 명령으로도 간단히 확인 가능

- telnet으로 FTP 서비스 포토를 지정하여 접속했을 때

  '220 (vsFTPD 3.0.2) 가 출력되면 FTP가 정상적으로 동작한다는 것

=============================================================

sjw@sjw-HP-Mini-110-3500:~$ telnet 0 21
Trying 0.0.0.0...
Connected to 0.
Escape character is '^]'.
220 (vsFTPd 3.0.2)
^C

=============================================================






FTP 클라이언트 사용하기

- 리눅스에는 FTP 클라이언트가 기본적으로 설치

- FPT 클라이언트는 기본적으로 텍스트 모드




FTP 서버 접속하기

- FTP 클라이언트를 사용하려면 우선 FTP 서버의 호스트 이름(또는 IP주소)과 로그인 이름, 암호를 알아야함


1) FTP 클라이언트의 명령은 'ftp'

=============================================================

sjw@sjw-HP-Mini-110-3500:~$ ftp 192.168.0.12
Connected to 192.168.0.12.
220 (vsFTPd 3.0.2)
Name (192.168.0.12:sjw):

=============================================================



2-1) 로그인 성공

=============================================================

sjw@sjw-HP-Mini-110-3500:~$ ftp 192.168.0.12
Connected to 192.168.0.12.
220 (vsFTPd 3.0.2)
Name (192.168.0.12:sjw): sjw
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp>

=============================================================


2-2) 로그인 실패  후 재 접속

=============================================================

sjw@sjw-HP-Mini-110-3500:~$ ftp 192.168.0.12
Connected to 192.168.0.12.
220 (vsFTPd 3.0.2)
Name (192.168.0.12:sjw): sjw
331 Please specify the password.
Password:
530 Login incorrect.
Login failed.
ftp> user
(username) sjw
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp>

=============================================================





FTP 내부 명령

내부 명령

의미

cd 원격 디렉터리

- 원격 호스트의 디렉터리를 이동

lcd 지역 디렉터리

- 지역 호스트의 디렉터리를 이동

pwd

- 원격 호스트의 현재 디렉터리를 출력

!pwd

- 지역 호스트의 현재 디렉터리를 출력

ls 또는 dir

- 원격 호스트의 파일 목록을 출력

- dir 명령은 상세한 파일 정보를 출력

!ls

- 지역 호스트의 파일 목록을 출력

mkdir 원격 디렉터리

- 원격 호스트에 디렉터리를 생성

rmdir 원격 디렉터리

- 원격 호스트의 디렉터리를 삭제

get 원격 파일명 [지역 파일명]

- 원격 파일 하나를 지역호스트로 가져옴.

- 지역 파일명을 지정하면 지정한 파일명으로 저장

- 지정하지 않으면 원격 파일명과 동일한 파일명으로 저장

mget 원격 파일명

- 원격 호스트에서 여러 개의 파일을 가져옴

put 지역 파일명 [원격 파일명]

- 지역 파일 하나를 원격 호스트로 보냄

- 원격 파일명을 지정하면 지정한 파일명으로 저장

- 지정하지 않으면 지역 파일명과 동일한 파일명으로 저장

mput 지역 파일명

- 여러 개의 지역 파일을 보냄

prompt

- mget 이나 mput 명령 사용시 파일 전송 여부를 물어볼 것인지를 결정

hash

- 파일이 전송되는 동안 #을 출력하여 진행 상황을 알려줌

bin

- 바이너리 파일을 송수신할 것임을 지정

bye

- ftp를 종료

open

- ftp로 접속할 호스트를 입력하도록 함

user

- 사용자명을 다시 입력할수 있도록 함

? 또는 help [명령]

- 명령에 대한 도움말을 출력




파일 송수신하기

- ftp 명령으로 송수신할 때는 우선 dir이나 ls 명령으로 파일을명을 확인

- 'get', 'mget' 명령으로 파일을 가져오거나, 'put', 'mput' 명령으로 파일을 보냄

- 'get' 과 'put' 명령은 한 번에 파일 하나를 송수신

- 'mget' 과 'mput' 명령은 한 번에 여러 개의 파일을 송수신

- 'mget' 과 'mput' 명령을 사용하면 각 파일을 전송할 것인지 매번 물어보는데

  'prompt' 명령으로 이를 설정하거나 해제할 수 있음




pwd, dir 명령 사용하기

- 'pwd' 명령으로 원격 시스템의 현재 디렉터리 위치를 확인

- 'dir' 명령으로 디렉터리의 내용을 확인

- 한글이 깨져보이는 것은 문자 집합의 차이 때문

=============================================================

ftp> pwd
257 "/home/sjw"
ftp> dir
200 PORT command successful. Consider using PASV.
150 Here comes the directory listing.
drwxrwxr-x    3 1000     1000         4096 May 01 17:16 Develop
drwxrwxr-x    7 1000     1000         4096 Apr 28 22:48 Phone_Data
drwxrwxr-x    2 1000     1000         4096 Apr 30 22:53 VISUAL_Sample
-rw-r--r--    1 0        0             439 May 05 12:44 dump.out
-rw-r--r--    1 1000     1000         8980 Mar 02 22:20 examples.desktop
-rw-rw-r--    1 1000     1000            5 May 05 23:00 test.txt
drwxr-xr-x    2 1000     1000         4096 Mar 02 22:51 ??????
drwxr-xr-x    3 1000     1000         4096 May 06 02:24 ????????????
drwxr-xr-x    2 1000     1000         4096 Mar 02 22:51 ??????
drwxr-xr-x    2 1000     1000         4096 Mar 02 22:51 ????????????
drwxr-xr-x    2 1000     1000         4096 Mar 02 22:51 ?????????
drwxr-xr-x    2 1000     1000         4096 Mar 02 22:51 ??????
drwxr-xr-x    3 1000     1000         4096 Apr 27 21:47 ??????
drwxr-xr-x    2 1000     1000         4096 Mar 02 22:51 ?????????
226 Directory send OK.
ftp> 

=============================================================




get 명령 사용하기

=============================================================

ftp> pwd
257 "/home/sjw"
ftp> !pwd
/home/sjw/Develop
ftp> ls
200 PORT command successful. Consider using PASV.
150 Here comes the directory listing.
drwxrwxr-x    3 1000     1000         4096 May 01 17:16 Develop
drwxrwxr-x    7 1000     1000         4096 Apr 28 22:48 Phone_Data
drwxrwxr-x    2 1000     1000         4096 Apr 30 22:53 VISUAL_Sample
-rw-r--r--    1 0        0             439 May 05 12:44 dump.out
-rw-r--r--    1 1000     1000         8980 Mar 02 22:20 examples.desktop
-rw-rw-r--    1 1000     1000            0 May 06 16:42 test.txt
drwxr-xr-x    2 1000     1000         4096 Mar 02 22:51 ??????
drwxr-xr-x    3 1000     1000         4096 May 06 02:24 ????????????
drwxr-xr-x    2 1000     1000         4096 Mar 02 22:51 ??????
drwxr-xr-x    2 1000     1000         4096 Mar 02 22:51 ????????????
drwxr-xr-x    2 1000     1000         4096 Mar 02 22:51 ?????????
drwxr-xr-x    2 1000     1000         4096 Mar 02 22:51 ??????
drwxr-xr-x    3 1000     1000         4096 Apr 27 21:47 ??????
drwxr-xr-x    2 1000     1000         4096 Mar 02 22:51 ?????????
226 Directory send OK.
ftp> get test.txt
local: test.txt remote: test.txt
200 PORT command successful. Consider using PASV.
150 Opening BINARY mode data connection for test.txt (0 bytes).
226 Transfer complete.
ftp>
=============================================================





mget 명령 사용하기


ftp> mget down*.txt

ftp> mget exe*dd.txt

이런 형식으로 가져올수도 있음


=============================================================

ftp> pwd
257 "/home/sjw"
ftp> !pwd
/home/sjw/Develop
ftp> ls
200 PORT command successful. Consider using PASV.
150 Here comes the directory listing.
drwxrwxr-x    3 1000     1000         4096 May 06 16:43 Develop
drwxrwxr-x    7 1000     1000         4096 Apr 28 22:48 Phone_Data
drwxrwxr-x    2 1000     1000         4096 Apr 30 22:53 VISUAL_Sample
-rw-r--r--    1 0        0             439 May 05 12:44 dump.out
-rw-r--r--    1 1000     1000         8980 Mar 02 22:20 examples.desktop
-rw-rw-r--    1 1000     1000            0 May 06 16:42 test.txt
drwxr-xr-x    2 1000     1000         4096 Mar 02 22:51 ??????
drwxr-xr-x    3 1000     1000         4096 May 06 02:24 ????????????
drwxr-xr-x    2 1000     1000         4096 Mar 02 22:51 ??????
drwxr-xr-x    2 1000     1000         4096 Mar 02 22:51 ????????????
drwxr-xr-x    2 1000     1000         4096 Mar 02 22:51 ?????????
drwxr-xr-x    2 1000     1000         4096 Mar 02 22:51 ??????
drwxr-xr-x    3 1000     1000         4096 Apr 27 21:47 ??????
drwxr-xr-x    2 1000     1000         4096 Mar 02 22:51 ?????????
226 Directory send OK.
ftp> !ls
VSCode-linux-x64  test.txt
ftp> mget dump.out dump_get.out
mget dump.out? y
200 PORT command successful. Consider using PASV.
150 Opening BINARY mode data connection for dump.out (439 bytes).
#
226 Transfer complete.
439 bytes received in 0.02 secs (27.2 kB/s)
ftp> 

=============================================================


- mget 명령을 사용할 때 각 파일을 수신할 것인지를 물어봄

- 일일이 답하기 귀찮으면 'mget' 명령을 사용하기전 'prompt' 명령을 입력

=============================================================

ftp> prompt
Interactive mode off.
ftp> mget dump.out dump_get2.out
local: dump.out remote: dump.out
200 PORT command successful. Consider using PASV.
150 Opening BINARY mode data connection for dump.out (439 bytes).
#
226 Transfer complete.
439 bytes received in 0.00 secs (923.9 kB/s)
ftp>
=============================================================


- 대화형 모드 끄기는 매번 물어보는 기능을 비활성했다는 의미

- mget 명령에서 수신 여부를 매번 물어보지 않고 바로 전송




hash 명령 사용하기

- ftp로 파일을 송수신할 때 송수신이 진행되는지를 나타내려면 hash 명령을 사용

- hash 명령은 파일이 송수신 중이라는 표시로 #을 출력




bye 명령 사용하기

- ftp 접속을 종료하는 명령




익명 FTP 사용하기 

- 익명 FTP란 FTP 서비스를 제공하는 호스트에 등록된 로그인 이름을 몰라도 익명으로 ftp를 이용할 수 있도록 하는 것

- 이 때 사용하는 로은 이름은 anymous

- 암호는 자신의 이메일 주소를 입력하면 됨(이메일 주소 말고도 아무거나 입력해도 됨)

- 익명 FTP 서비스는 시스템 관리자가 이 서비스를 제공하도록 설정해 놓은 호스트만 서비스 제공이 가능

- 익명 FTP의 허용은 '/etc/vsftpd.conf' 파일에서 처리

- 우분투에서 vsftpd 는 기본적으로 익명 FTP를 허용하지 않음


=============================================================

sjw@sjw-HP-Mini-110-3500:~$ sudo vi /etc/vsftpd.conf

#
# Run standalone with IPv6?
# Like the listen parameter, except vsftpd will listen on an IPv6 socket
# instead of an IPv4 one. This parameter and the listen parameter are mutually
# exclusive.
#listen_ipv6=YES
#
# Allow anonymous FTP? (Disabled by default)
#anonymous_enable=NO

anonymous_enable=YES
#
# Uncomment this to allow local users to log in.
local_enable=YES
#

=============================================================


- 설정 파일(/etc/vsftpd.conf)의 내용이 바뀌었으므로 vsftpd를 다시 시작

=============================================================

sjw@sjw-HP-Mini-110-3500:~$ sudo service vsftpd restart
vsftpd stop/waiting
vsftpd start/running, process 5469
sjw@sjw-HP-Mini-110-3500:~$

=============================================================


- 로그인 이름으로 'anonymous' 를 사용

- 비밀번호를 아무거나

=============================================================

sjw@sjw-HP-Mini-110-3500:~$ ftp localhost
Connected to localhost.
220 (vsFTPd 3.0.2)
Name (localhost:sjw): anonymous
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp>
=============================================================





반응형