본문 바로가기
컴퓨터 활용(한글, 오피스 등)/기타

Emacs Tramp ssh

by 3604 2023. 12. 6.
728x90

출처: https://wiki.kldp.org/wiki.php/EmacsTramp

Emacs Tramp 

Tramp는 Emacs에서 원격 파일을 편집하는데 사용하는 패키지이다. 예를 들어 Emacs가 설치되지 않은 서버의 파일을 Emacs로 편집하고자 한다면, 로컬 컴퓨터에서 Emacs를 실행하여 Tramp로 접근하여 파일을 읽고 쓸 수 있다. Tramp는 'Transparent Remote (file) Access, Multiple Protocol'의 머리글자를 딴 것이다.

비슷한 기능을 하는 Ange-FTP가 있다. Ange-FTP는 ftp를 이용하여 원격 컴퓨터의 파일을 수정하는데, 이 과정에서 원격 컴퓨터의 계정과 비밀번호가 암호화되지 않은 상태 그대로 전송된다. 악의적인 사용자가 이것을 가로채면 비밀번호가 노출될 위험을 가지고 있다. Tramp는 ssh같은 보안 프로토콜을 사용하여 Ange-FTP의 단점을 보완한다.

이 문서에서는 ssh 프로토콜을 이용하여 Emacs Tramp로 원격지의 파일을 안전하게 편집하는 방법을 정리한다.
 

설치방법 

 
 

Tramp 설치 

당연히 Emacs와 ssh 프로그램이 있어야 한다. Cygwin 환경에서 동작하는 것으로 보아 일반 리눅스/유닉스 환경에서도 동작할 것으로 생각한다.

아직 Tramp는 Emacs의 정식 패키지가 아니다. 
소스코드를 직접 내려받아야 한다.

Tramp를 내려받아 적당한 경로에 설치한다. Emacs 시작파일에 다음과 같은 내용을 추가한다. Tramp 관련 파일을 홈 디렉토리의 tramp라는 디렉토리에 저장했으면 다음과 같이 한다.
(add-to-list 'load-path "~/tramp/lisp")
(setq tramp-debug-buffer t)
(setq tramp-verbose 10)
(setq tramp-default-method "sshx")
(require 'tramp)
(setq tramp-debug-buffer t)과 (setq tramp-verbose 10)는 Tramp를 설정하면서 발생할 수 있는 에러를 검사하기 위해서 명시적으로 설정했다.
 

SSH 설정 

Ange-FTP와 달리 ssh를 이용하면 원격 컴퓨터의 계정과 암호 뿐 아니라 전송되는 자료 전체가 암호화되므로 훨씬 안전하다. ssh 프로토콜로 tramp를 구동하려면 현재 컴퓨터에서 ssh를 사용할 수 있어야 한다. 자세한 내용은 ssh 설정 문서를 참고하기 바란다.

특히 중요한 것은, 별도로 계정/암호를 입력하지 않고 바로 ssh로 원격 컴퓨터에 접속할 수 있도록 설정되어야 한다는 점이다. 이와 같은 방법은 여러 문서에서 언급하고 있으므로 여기에서는 별도로 설명하지 않는다.
 

원격 컴퓨터 설정 

tramp는 기본적으로 ssh 프로토콜로 전송되는 원격 컴퓨터의 내용을 정규 표현식으로 걸러내서 emacs 에디터에서 사용할 수 있도록 화면에 보여주는 방식이다. 예를 들어 원격 컴퓨터에서 사용자의 로그인 정보를 입력하기 기다리는 상태에서는 Login: 등의 문자열이 원격 컴퓨터에서 ssh를 통해서 전송되기를 기다리는 방식이다. 그렇기 때문에 원격 컴퓨터에서 몇 가지 설정이 필요하다.

먼저 bash등을 사용하는 경우, 셸 프롬프트를 단순하게 설정해야 한다. bash의 프롬프트를 화려하게 바꾸어주는 문서등을 참고하여 셸 프롬프트를 변경한 사용자라면, tramp를 사용하기 위해서 셸 프롬프트를 초기 설정으로 바꾸어 주는 것이 좋다. 또한 로케일 설정도 한글등으로 하지 말고 기본 설정으로 바꾸어 주는 것이 좋다.
 

로컬 컴퓨터 설정 

로컬에서도 마찬가지로 로케일을 기본 로케일로 설정하는 것이 좋다.

실행 

모든 준비가 끝났으면, Emasc에서 eshell 모드나 셸 모드로 들어가서 ssh 명령이 제대로 돌아가는지 확인한다. 암호나 계정정보를 별도로 입력할 필요 없이 바로 ssh로 접속할 수 있다면 이제 tramp를 사용할 수 있는 환경이 설정된 것이다.

원격에 있는 파일을 불러올 때는 일반적으로 파일을 불러올 때 사용하는 명령 C-x C-f을 그대로 사용하면 된다. 다만, 원격 컴퓨터의 경로라는 것을 명시해야 한다. 예를 들어서 alice라는 사용자가 원격 foo.bar.com에서 홈 디렉토리에 있는 ~/public_html/hodgepodge/index.html를 편집하고자 한다면 다음과 같이 파일을 불러들인다.
C-x C-f /alice@foo.bar.com:public_html/hodgepodge/index.html
728x90
반응형