우분투가 설치된 로컬 PC와 원격 서버 (=빌드 서버 or 백업 서버)가 있는 경우 로컬 PC에서 원격 서버를 마운트 하는 방법을 정리하였다.
안드로이드 소스는 120GB 이상이고, 빌드가 완료되면 250GB 정도가 넘기 때문에 별도의 빌드 서버를 사용하는 경우가 많다. 로컬 PC에 설치된 IDE를 사용해서 원격 서버에 있는 파일을 수정하는 경우 sshfs로 원격 서버의 폴더를 마운트 해서 마치 로컬 PC의 파일을 수정하는 것처럼 사용할 수 있다. 또한 별도의 파일 서버나 백업 서버를 사용하는 경우에도 sshfs 유용하다. 회사에서는 보안 때문에 SMB 나 FTP를 막아 놓는 경우가 많지만 SSH 는 항상 열어 놓기 때문에 SSH 기반의 sshfs를 사용할 수 있고, Windows 용 sshfsWin 또한 사용 가능하다.
사전 작업
1. 로컬 PC에서 ssh 용 public key 생성
로컬 PC 에서 $ssh-keygen을 실행해서 SSH public key를 생성한다. Public Key가 ~/.ssh/id_rsa 가 생성되고 public key를 원격 서버에 등록하여 패스워드 인증 없이 로그인 가능하다.
# 로컬 서버에서 public key 생성
$ ssh-keygen
$ cat ~/.ssh/id_rsa
2. 원격 서버에 public key 등록
원격 서버에 접속해서 ./ssh/id_rsa.pub 파일의 내용을 ~/.ssh/authoized_keys 파일에 추가한다. 파일이 없으면 authoized_keys 파일을 추가한다.
#원격 서버에 public key 등록
# ssh [your id]@201.12.02.10 연결
# authoized_keys 에 id_rsa.pub 파일의 내용을 추가하고 저장한다.
$ vi ~/.ssh/authoized_keys
<rsa public key 내용 추가>
참고로, ssh-rsa key는 아래와 같이 ssh-rsa로 시작해서 암호화된 문구 뒤에 PC 이름으로 끝난다.
우분투에서 SSHFS 설치 및 세팅
1. sshfs 설치
$ sudo apt install sshfs 명령어로 sshfs 설치한다. sshfs 관련 deb 파일도 자동으로 설치된다.
# 로컬 PC에 sshfs 설치
$ sudo apt install sshfs
2. 마운트 폴더를 생성
원격 드라이브를 /mnt 나 /media로 마운트 가능하지만, 홈 폴더 하위의 폴더로 마운트 지점을 잡는다. ~/remote라는 폴더를 생성한다.
# 마운트 지점 설정 홈 폴더 하위에 생성
$ mkdir -p ~/remote
3. 원격 서버 마운트
sshfs 명령어를 사용해서 로컬 PC에서 원격 서버 특정 폴더를 마운트 한다. 원격 서버의 ID, IP, 폴더 위치를 지정해서 로컬 폴더로 마운트 시킨다. 원격 폴더의 경로는 반드시 절대 경로로 작성해야 한다. 상대 경로로 작성하면 에러가 발생한다.
$ sshfs kibua@100.200.300.200:/home/kibua/git /home/kibua/remte
4. sshfs에서 /etc/fstab
부팅할 때마다 sshfs로 원격 서버의 폴더를 마운트 하기 위해서 /etc/fstab 에 sshfs를 추가해야 한다. User ID, 원격 서버 주소, 폴더, UID, GID는 는 각 우분투 설치 환경에 맞게 작성해야 한다.
/etc/fstab 작성 시 주의해야 할 점은 options이다. IdentifyFile은 ssh 인증을 해 놓은 public key 파일을 설정하여 패스 워드 입력 없이 인증되도록 한다. IdentityFile을 작성하지 않으면 부팅할 때마다 패스워드를 입력해야 한다. 또한 fstab 은 root 권한으로 실행하기 때문 allow_other 옵션 없으면 root 권한으로 마운트 하기 때문에 일반 user는 permission이 없어 접근할 수 없다. 그래서 allow_other 옵션을 사용해야 하고, 실제 사용자 계정의 uid와 gid를 설정해야 한다.
$sudo vi /etc/fstab
# fstab 은 아래와 같이 추가한다.
kibua20@100.502.100.227:/home/kibua/git /home/remote fuse.sshfs defaults,IdentityFile=/home/kibua/.ssh/id_rsa,_netdev,delay_connect,allow_other,uid=1000,gid=1000 0 0
<옵션 요약> ※출처: https://www.tuwlab.com/ece/26648
- defaults 설정되지 않은 값에 대해서는 기본 설정을 따릅니다.
- _netdev 네트워크 드라이브임을 의미하며, 마운트 시도 전 네트워크가 올바르게 설정되어 있는지 검사합니다.
- delay_connect 부팅 과정에서 아직 네트워크 설정이 끝나지 않아 마운트를 하지 못하는 경우에 대비하여 시간을 지연하여 연결합니다.
- allow_other 마운트된 디렉토리에 일반 유저의 접근을 허용합니다.
- uid, gid 마운트된 디렉토리의 소유(Ownership)을 지정합니다. 특정 유저의 uid및 gid는 'id {username}'명령으로 확인할 수 있습니다.
- IdentifyFile 인증에 사용할 Key를 지정합니다. 마운트는 root 권한으로 실행되므로 Key가 root의 홈 디렉터리에 존재하지 않는 경우 이렇게 수동으로 지정해 줘야 합니다.
5. 마운트 연결 확인 및 해제
sudo /etc/fstab으로 수정 후 $ sudo mount --all 하면 리부팅 없이 mount 가 가능하고, df 명령어로 정상적으로 마운트 동작 확인이 가능하다. 연결 해제는 $ sudo unmout [마운트 위치]로 가능하다.
# fstab 수정 후 파일 시스템 마운트, 기존에 마운트 된 sshfs가 있다면 해제 후 mount를 해야 함
$ sudo mount --all
$ df
# 마운트 해제
$ sudo unmout /home/remote
Windows 에서 SSHFS 설치 및 문제점
윈도우에서는 sshfs 설치는 아래 2개의 package를 설치하면 네트워크 드라이브 설정이 가능하다. sshfs-win은 cygwin 기반으로 개발된 것으로 cygwin dll도 같이 설치된다.
Install WinFsp : https://github.com/billziss-gh/winfsp/releases/latest
Install SSHFS-Win : https://github.com/billziss-gh/sshfs-win/releases/latest
Windows 커맨드에서 net use 명령어 실행하고 패스워드를 입력하면 네트워크 드라이브가 연결된다.
net use y: \\sshfs\[your id]@192.168.XXX.XXX!22\[your id] /user:[your id]
네트워크 드라이드 연결 후 원격 폴더의 파일의 읽기까지는 문제가 없지만, 원격 폴더에 Writing 하는 경우 Permission 에러가 발생한다. 원격 드리이브 연결 시 지정한 ID 로 연결되는 것이 아니고, 윈도우즈 로그인한 도메인 계정으로 연결되는 것으로 추정된다. 이 부분은 회사 보안 정책 문제인지 Win 10 설정 문제인지 확인이 필요하고 문제가 해결되면 업데이트 예정이다. 결국 어쩔 수 없이 MobaXTerm 을 이용해서 sftp를 사용해야 한다.
<관련글>
[개발환경] - [Tips] 우분투20.04에서 한글 오타 방지 (UIM '벼루' 설치기)
[개발환경] - Ubuntu 20.04에서 sshfs 를 이용한 원격 폴더 마운트
[개발환경] - [Tips] Ubuntu 20.04 에서 Home 폴더 이름을 영문으로 변경
[개발환경] - [Tips] Ubuntu 20.04 에서 swap file 늘리기
[개발환경] - [Tips] Ubuntu 20.04 에서 Citrix Receiver for Chrome 설치
[개발환경] - 14. 우분투 터미널에 Putty 스타일 Copy&Paste 적용 (Terminator)
[개발환경] - 13. 광고 없이 Youtube 동영상 다운로드 방법
[개발환경] - 10. Ubuntu에서 Microsoft 365 '무료'로 사용하기
[개발환경] - 8. Ubuntu 테마 설치 (맥분투 만들기)
[개발환경] - [Tips] Ubuntu 20.04 키 모음 잠금 풀기 (부팅 후에 표시하지 않도록 수정하기)
[개발환경] - [Tips] 우분투 단축키 (화면 캡쳐, 화면 녹화)
댓글