'ssh'에 해당되는 글 2건

  1. 2007/09/13 SSH Filesystem 구현 (2)
  2. 2005/03/08 ssh, rsync 를 이용한 네트웍 동기화
1. 개요

sshfs는 ssh기반의 파일시스템이다.
요즘 거의 대부분의 시스템에서 ssh를 사용하기때문에 서버에서 특별한 작업은 필요가 없다.
단지, 클라이언트에서 ssh 사용하듯이 클라이언트의 특정 마운트포인터를 지정해주고 접속하면 된다.
이런 개념은 LUFS 에서 차용했었고 굉장히 유효하여 nfs가 가지고 있는 고질적인 문제들(보안,권한)을 완전히 대체할 수 있는 획기적인 파일시스템이다.

리눅스에서 sshfs를 사용하기 위해선 FUSE 관련 패키지가 설치되어야 하는데 커널버전 2.6.14 이후엔 자동 포함되어 있다.
그 이전버전이라도 수동으로 설치하면 된다.


2. 현재상황 및 시스템 상태

이런 상황을 가정해 본다.

desktop이 2대 있는데 하나(A 시스템:1.1.1.50)는 리눅스이고 또다른 하나(B 시스템:1.1.1.200)는 윈도우즈/리눅스를 멀티부팅해서 사용한다.(B 시스템은 거의 리눅스로 부팅한다)
A에서 mplayer로 B의 ntfs 파티션에 저장되어 있는 영화를 볼려고 한다.
원래 나의 계획은 B 시스템의 ntfs 를 자동마운트 시켜놓고 A 시스템에서 nfs 로 마운트해서 접근하려고 했지만 nfs로 ntfs 파일시스템에 access 할 수 없었다.
해결책은 있지만(ntfs-3g로 검색) 구질구질한 nfs 말고 다른 방법을 찾다가 sshfs를 적용시키기로 했다.

즉,
B 시스템에서 ntfs로 마운트 시켜놓고 A 시스템에서 sshfs로 마운트해서 A 시스템의 mplayer로 영화를 보는것이다.


3. 구현

영화파일이 있는 시스템 설정(1.1.1.200)

sshd이 구동되어야 한다.
부팅시 ntfs 파티션이 자동 마운트되게 했다.
# cat /etc/conf.d/local.start
/bin/mount -t ntfs -o utf8 /dev/hda5 /mnt/win &> /dev/null

끝이다.

mplayer가 있는 시스템 설정(1.1.1.50)

sshfs 관련 패키지를 emerging한다.
# emerge -pv sshfs-fuse
These are the packages that would be merged, in order:

Calculating dependencies... done!
[ebuild  N    ] dev-libs/glib-2.12.13  USE="-debug -doc (-hardened)" 0 kB
[ebuild  N    ] sys-kernel/gentoo-sources-2.6.22-r5  USE="-build -symlink" 44,162 kB
[ebuild  N    ] sys-fs/fuse-2.6.4-r1  0 kB
[ebuild  N    ] sys-fs/sshfs-fuse-1.6  0 kB

Total: 4 packages (4 new), Size of downloads: 44,162 kB
# emerge sshfs-fuse

홈디렉토리에 sshfs/ 디렉토리(mount pointer)를 생성한다.
주의할 점은 mount pointer는 자신이 access 가능한 권한이어야 한다는 것이다.
$ sshfs root@1.1.1.200:/mnt/win ~/sshfs/
Password: *****
$ ls ~/sshfs/mnt/win/
...
$ gmplayer ~/sshfs/mnt/win/speed_1.avi

언마운트는 fusermount -u 또는 umount를 사용한다.
$ umount ~/sshfs/  또는 fusermount -u ~/sshfs/


4. 참조 url

http://fuse.sourceforge.net/sshfs.html
http://coffeenix.net/board_print.php?bd_code=1491
http://ubuntu.wordpress.com/2005/10/28/how-to-mount-a-remote-ssh-filesystem-using-sshfs/


10개의 서버(www1 ~ 10)를 동기화 시켜야 한다고 가정한다.


동기화 시킬 메인 서버를 www1, 나머지 클라이언트 www2 ~ 10


테스트 환경 :

Linux 2.2.x ~ 2.4.x

OpenSSH_3.1p1

rsync-2.5.4-2


메인서버 www1의 rsync 설정 파일을 편집한다.

# vi /etc/rsyncd.conf

[sync]
path = /www/htdocs/sync
comment = syncdata
uid = nobody
gid = nobody
use chroot = yes
read only = yes
hosts allow = www2 www3 www4 www5 www6 www7 www8 www9 www10
timeout 100


서버쪽 설정끝


클라이언트별로 ssh 인증키를 발급해서 www1에 전송한다.


$ ssh-keygen -d

로컬서버(id_dsa)와 원격서버(id_dsa.pub)의 인증키값 쌍을 생성한다.

이때, 비번을 물어보는데 rsync로 접속할때 비번없이 접속하기 위해 그냥 Enter를 친다.

생성한 원격인증키를 서버에 전송한다.

$ scp -p ~/.ssh/id_dsa.pub myid@www1:~/.ssh/authorized_keys2

비번을 물어보면 정확하게 입력한다.

참고로, 서버와 클라이언트에는 같은 사용자아이디/비번이 존재해야 한다.


### 주의사항 ###

예를들어, www2번에서 인증키를 생성한 다음 scp로 원격 copy 하면 www1에 ~/.ssh/authorized_keys2 파일이 생성된다.

www3 번 역시 ssh-keygen 으로 키값을 생성해서 scp로 전송하면 www2의 ssh 접속에 비번을 물어보게 된다.

왜냐하면, scp 명령으로 기존에 만들어졌던 authorized_keys2 파일을 덮어 씌워버리기 때문..

이 부분에서 삽질 좀 했음...

google 에서도 명쾌한 답이 나오지 않아 모든 호스트들의 ssh 접속 키값만 생성한 다음 서버의 authorized_keys2 에 직접 복사를 해줌.

단, 하나의 인증키값은 하나의 행이어야 함(LF,CR 없음) - 복사시 신중을 기해야...


모든 작업이 끝나면 테스트를 해본다.


$ hostname

www6

$ rsync -avz -e ssh www1:/www/htdocs/sync/ /www/htdocs/sync


크론으로 돌리면 자동 네트웍 동기화가 이루어 진다.

TAG rsync, ssh