리눅스2023. 8. 7. 10:26

 

반달가면 이글루에서 백업 - http://bahndal.egloos.com/614849 (2018.5.9)

리눅스에서 curlftpfs를 활용하면 ftp 서버에 접속해서 작업하는 과정을 로컬(local) 디렉토리에서 작업하는 방식과 동일하게 만들 수 있다. ftp 서버의 디렉토리를 로컬 디렉토리에 연결(마운트)해 준다.

우선 curlftpfs 패키지를 설치하자. 데이안/우분투 계열 기준으로 터미널창에서 아래와 같이 입력

# curlftpfs 설치
sudo apt-get install curlftpfs

이제 연결을 해 보자. 예를 들어 ~/ftpfs_test 디렉토리에 연결할 ftp 서버 주소는 ftp.my_server.net, 접속 계정은 john, 암호는 abcd라면 아래와 같이 실행할 수 있다.

curlftpfs ftp://john:abcd@ftp.my_server.net ~/ftpfs_test

이제 ~/ftpfs_test 디렉토리로 가 보면 ftp 서버에 접속한 것과 동일한 내용의 파일과 디렉토리를 볼 수 있을 것이다.

연결을 해제하고 싶다면 아래와 같이 하면 되겠다.

# ~/ftpfs_test 디렉토리에 연결(마운트)된 ftpfs 해제
fusermount -u ~/ftpfs_test

ftp 서버의 특정 디렉토리를 연결하고 싶다면 아래와 같이 해 준다. 위의 예시에서 ftp 서버의 /my_test_dir/ 디렉토리를 ~/ftpfs_test에 연결하는 경우다.

curlftpfs ftp://john:abcd@ftp.my_server.net/my_test_dir/ ~/ftpfs_test

curlftpfs를 위와 같이 사용할 경우 보안 측면에서 한가지 문제가 있는데, ps 명령으로 찾아 보면 사용자 계정과 암호가 그대로 다 노출된다는 점이다. 클라이언트 장비를 혼자만 사용하고 있다면 별 문제가 아닐 수도 있겠지만 여러명이 같이 쓰는 장비라면 암호가 노출되지 않도록 해야 한다. 명령어 입력에 계정과 암호를 쓰지 말고 해당 ftp 서버에 대한 로그인 정보를 .netrc 파일에 저장해서 자동 로그인을 사용하는 것이 좋겠다. .netrc 파일을 이용한 ftp 서버 자동 로그인은 이전 게시물을 참고하자. 여기로

 

위의 예시를 가지고 보자면, ~/.netrc 파일을 편집해서 아래와 같이 추가하고 저장한다.

machine ftp.my_server.net login john password abcd

.netrc 파일의 접근권한은 반드시 소유자에게만 있어야 함에 유의.

chmod 600 ~/.netrc

자동 로그인이 설정되었으므로 이제 ftp 서버의 계정과 암호를 다른 사용자에게 노출시키지 않고 사용할 수 있다.

# .netrc 파일에 있어 계정/암호 지정 불필요(자동 로그인)
curlftpfs ftp://ftp.my_server.net ~/ftpfs_test

만약 ftp 통신을 SSL/TLS로 암호화하고 싶다면(ftps를 사용하고 싶다면) -o 옵션으로 ssl이라고 지정해 준다.

# SSL/TLS 암호화(ftps)
curlftpfs -o ssl ftp://ftp.my_server.net ~/ftpfs_test

NAS 장비의 ftp 서비스를 이용할 경우 자기서명 인증서(self-signed certificate)를 사용하기 때문에 인증서 검증이 불가능한 경우가 있는데, 이럴 때는 인증서 검증을 생략하기 위해 -o 옵션에 no_verify_peer를 추가. -o 옵션의 각 항목은 쉼표(,)로 구분하고 띄어쓰기가 없음에 유의.

# SSL/TLS 암호화(ftps), 인증서 검증 생략
curlftpfs -o ssl,no_verify_peer ftp://ftp.my_server.net ~/ftpfs_test

연결된 디렉토리에 다른 사용자도 접근할 수 있도록 하고 싶다면 -o 옵션에 allow_other를 추가.

# SSL/TLS 암호화(ftps), 인증서 검증 생략, 다른 사용자의 접근 허용
curlftpfs -o ssl,no_verify_peer,allow_other ftp://ftp.my_server.net ~/ftpfs_test

루트(root)의 접근 허용은 별도의 옵션이다. -o 옵션에 allow_root를 추가.

# SSL/TLS 암호화(ftps), 인증서 검증 생략, root의 접근 허용
curlftpfs -o ssl,no_verify_peer,allow_root ftp://ftp.my_server.net ~/ftpfs_test

만약 읽기 전용(read-only)으로 연결하려면 -r 옵션을 추가해 준다.

# SSL/TLS 암호화(ftps), 인증서 검증 생략, 읽기 전용(-r)
curlftpfs -r -o ssl,no_verify_peer ftp://ftp.my_server.net ~/ftpfs_test

참고로, ssh를 이용해서 ssh 서버의 디렉토리를 로컬 디렉토리로 연결할 수 있는 sshfs도 있는데 관련된 내용은 이전 게시물을 참고하자. 여기로

 

728x90
Posted by 반달가면