TRAMP로 원격 파일을 로컬 파일처럼 편집
ssh 프로토콜로 로그인해서 파일 편집을 하는데, emacs가 안 깔려있다고? 허허허. apt-get 명령은 잠시 접어두게. TRAMP(Transparent Remote file Access, Multiple Protocol) 패키지를 사용하면 원격 파일을 로컬 파일처럼 transparent 하게 수정할 수 있다.
C-x C-f /method:host:/path/to/file
tramp로 파일을 여는 명령은 따로 없다. find-file 명령에 녹여져 있다. 평소에 입력하는 패스 앞에 method와 host를 덧붙이면 된다.
C-x C-f /ssh:root@localhost <TAB>
패스워드 방식이나 디폴트 경로에 있는 identity file(private key)을 로그인에 사용하면 잘 동작한다. 하지만 identity file이 ~/.ssh/id_rsa가 아니라면 어떻게 해야 할까? identity file 경로를 입력할 방법이 없다.
$ cat ~/.ssh/config
Host default
HostName 127.0.0.1
User vagrant
Port 2200
UserKnownHostsFile /dev/null
StrictHostKeyChecking no
PasswordAuthentication no
IdentityFile /Users/ohyecloudy/test/tramp-test/.vagrant/machines/default/virtualbox/private_key
IdentitiesOnly yes
LogLevel FATAL
ssh config 파일을 사용하면 된다. 글을 쓰면서 vagrant로 가상 머신을 설치했다. 간단히 vagrant ssh-config >~/.ssh/config 명령으로 ssh config 파일 세팅을 했다.
C-x C-f /ssh:default:<TAB>
이제 이렇게 입력하면 로컬 디렉터리처럼 파일 이름 후보를 출력한다. 원격 파일을 로컬 파일처럼 편집하고 저장하면 원격 파일에 반영은 TRAMP가 알아서 해준다.
Update :
문자 입력하고 탭키를 눌러야 접속해서 후보를 보여준다.
참고
- Editing remote files with Emacs using public key authentication - stackoverflow.com
- TRAMP User Manual
C-x C-s C-x C-c