Emacs로 SSH 및 Sudo를 통해 파일 열기


114

서버의 sudo 전원을 사용하여 원격 서버에있는 Emacs 내에서 파일을 열고 싶습니다. 다음과 같이 Tramp를 통해 sudo로 로컬 파일을 열 수 있습니다.

C-x C-f /sudo::/home/user/file

하지만 서버에서 sudo를 사용하고 싶습니다.

C-x C-f /sudo::user@server/home/user/file

그러나 이것은 내 로컬 시스템에서 sudo 전원을 제공하고 로컬 시스템에서 내 sudo 암호를 요청합니다. 서버에서 sudo를 사용하는 방법이 있습니까?

BTW : Emacs가 서버에 설치되어 있지 않습니다.


서버에서 직접 루트로 명령 할 수 없습니까?
Chmouel Boudjnah 2010

2
sudo 권한이있는 사용자가 있지만 루트 암호는 없습니다.
Fernando Briano 2010

답변:


186

Emacs 24.3부터는 이전 multi:구문 의 아날로그가 현대적인 tramp-default-proxies-alist접근 방식 위에 계층화되었습니다 . 즉, 사전 구성없이 다시 한 번 다중 홉을 수행 할 수 있습니다. 자세한 내용은 다음을 참조하십시오.

C-hig (tramp) Ad-hoc multi-hops RET

새 구문을 사용하면 각 '홉'이 |. 설명서의 예는 다음과 같습니다.

C-xC-f /ssh:bird@bastion|ssh:you@remotehost:/path RET

먼저로 연결 bird@bastion되고 거기에서you@remotehost:/path

/ su : 또는 / sudo : 원격 호스트

이 구문을 사용하여 원격 호스트의 루트 (또는 다른 사용자)에게 sudo / su를 수행 할 수도 있습니다.

C-xC-f /ssh:you@remotehost|sudo:remotehost:/path/to/file RET

중요 : 명시 적으로 호스트 이름을 지정해야합니다 sudo:remotehost:보다는 sudo::(아래 참조).

여전히 아래의 프록시 메커니즘을 사용하므로 tramp-default-proxies-alist이제 값을 포함해야합니다.("remotehost" "root" "/ssh:you@remotehost:")

/ssh:you@remotehost:파일을 .txt로 요청할 때마다 프록시 가 사용됩니다 root@remotehost.

root 이 메소드의 기본 사용자이지만 물론 다음을 사용하여 루트가 아닌 사용자로 변경할 수도 있습니다.

C-xC-f /ssh:you@remotehost|sudo:them@remotehost:/path/to/file RET

항상 원격 호스트 이름을 명시 적으로 지정하십시오.

아마도 호스트 이름 을 사용 sudo::하거나 su::생략하는 데 익숙 할 것입니다 . 로컬 호스트에 머무르는 경우 에도 괜찮지 만 원격 서버 로 이동하는 경우 이전 홉과 동일하더라도 모든 홉에 대해 호스트 이름을 지정 해야합니다 . 항상 sudo:hostname:또는 su:hostname:원격 호스트와 함께 사용하십시오 .

여기 트랩 즉 sudo:: 않습니다 실제로 작동하는 것처럼 - 하지만 당신은 동적 프록시 항목의 HOST는 호스트 이름 것이라고 할 때 유래 는 연결된 호스트가 아니라에서. 이것은 혼란스러워 보일뿐만 아니라 (잘못된 호스트가 파일 경로에 표시 sudo::되므로) 로컬 호스트 에서 사용하려는 후속 시도 가 대신 원격 서버로 프록시 됨을 의미 합니다! (그리고 두 번째 서버에서 동일한 작업을 수행하면 프록시가 방해를 받아 추가 문제가 발생할 수 있습니다).

요컨대, ::멀티 홉을 할 때 사용하지 마십시오 !


4
이제 wikemacs뿐만 아니라 wikemacs.org/index.php/TRAMP에 추가되었습니다 . 감사합니다 phils, 훌륭하게 작동합니다.
Ehvince 2013-07-24

1
방금이 답변을 찾았고 .ssh / config 파일에 호스트 이름 속기를 정의한 것을 제외하고는 훌륭하게 작동합니다. 를 입력하면 /sudo:hostname:/etc/hosts예상 한 내용이 표시되지만을 입력 /sudo:abbrev:/etc/hosts하면 "호스트 abbrev가 원격 호스트처럼 보입니다. sudo는 로컬 호스트 만 사용할 수 있습니다."라는 메시지가 표시됩니다. 이 문제를 해결할 수 있습니까?
rogerl

2
rogerl : 또한 .ssh/config항목이 있으며 /ssh:abbrev|sudo:abbrev:/etc/hosts호스트 이름 약어를 사용하는 데 문제가 없습니다 . 먼저 호스트로 이동하지 않은 것 같습니다.
phils

@phils 아마도 나는 이것을 새로운 질문으로 게시해야 할 것입니다. 그러나 내 구성 파일은 Host r User rlipsett Hostname odlinux IdentityFile ~ / .ssh / id-rsa.pub처럼 tramp-default-proxies-alist보이며 올바른 것 같습니다. 그러나 위에서 설명한 동작은 계속됩니다. 내 구성 파일이 어떻게 든 잘못 되었습니까?
rogerl

이전 댓글에 넣은대로 실제로 사용하려고 하는지 /sudo:abbrev:/etc/hosts(언급 한대로 잘못된 것임 ) 또는 올바른 .NET을 사용하고 있는지는 여전히 명확하지 않습니다 /ssh:abbrev|sudo:abbrev:/etc/hosts. ssh 구성 파일은 그렇지 않으면 증거로 사용할 수 있으므로 아마도 괜찮습니다.
phils

21

업데이트 :이 답변은 원래 문제를 해결했지만 emacs 20 또는 21 용으로 작성되었습니다. emacs 24의 경우 더 많은 설명을 제공하고 최신 상태이므로 phils의 답변 을 사용하는 것이 좋습니다 .


나는 tramp의 다중 홉 파일 이름 이 당신이 찾고있는 것이라고 생각 합니다.

첫 번째 홉은 ssh이고 두 번째 홉은 sudo입니다.


업데이트 : 최신 버전의 emacs는 프록시를 사용하여 다중 홉을 지원합니다.

(add-to-list 'tramp-default-proxies-alist ("my-sudo-alias" nil "/ssh:user@ssh-host"))

그런 다음 다음을 열어 호출합니다.

/sudo:my-sudo-alias:file-on-ssh-host

이것이 해결책처럼 보이지만 "다중 방법이 더 이상 지원되지 않습니다"라는 메시지가 나타납니다. 업데이트 된 설명서를 알려줄 수 있습니까?
Fernando Briano 2010

Mx info, Cs tramp :) 가짜 호스트를 sudo의 대상으로 정의하고 tramp-default-proxy-alist에 추가해야 할 수도 있습니다.
Dave Bacher

2
내 구성에서 실행할 수 없었지만 (오류 255?) .emacs의 다음 줄이 작동합니다. (set-default 'tramp-default-proxies-alist (quote (( "my-sudo-alias"nil " / ssh : user @ ssh-host : "))))
ang mo

업데이트 된 답변은 "최근"을 정의하지 않고 유효하지 않은 elisp를 가지고 있으며 수정하더라도 작동하지 않습니다. 나는 업데이트 된 답변 후 1 년 동안 릴리스 된 안정적인 버전의 emacs를 사용하고 있습니다.
Michael Wolf

1
2014 / 24.3 의 실제 답변은 "ad-hoc multi-hops"를 사용한 다음 답변입니다.
TomRoche 2014 년

7

선택한 답변에 문제가 있습니다. 그러나이 줄을 .emacs에 추가하면 작동했습니다.

(add-to-list 'tramp-default-proxies-alist '(".*" "\\`root\\'" "/ssh:%h:"))

그리고 다음을 실행했습니다.

/sudo:ssh-host:file-on-ssh-host

한때 "루트"암호를 입력하라는 메시지가 표시되었지만 내 사용자 암호를 입력하면 액세스 권한이 부여 되었기 때문에 약간 혼란 스러웠습니다. 또한 네트워크의 모든 호스트에서 보편적으로 작동합니다. 또한 루트가되지 않도록이 작업을 수행 할 수 있습니다.

/ssh:ssh-host:file-on-ssh-host


3
이것은 나를 위해 작동하지 않았습니다. 우분투에서는 적어도 Emacs 23.2.1 버전과 tramp 버전 2.1.18-23.2에서는 작동하지 않는 것 같습니다. 그래도 작동합니다 : info.solomonson.com/content/…
gaizka

(set-default 'tramp-default-proxies-alist (quote (( ". *" "\`root \\'" "/ ssh : % h :"))))
gaizka

1
위의 솔루션 (목록에 추가 또는 기본값 설정) 중 하나를 사용할 수 없습니다. 첫 번째는 abc.xyz.com' looks like a remote host, "/sudo:abc.xyz.com :"에 두 번째 콜론을 입력하자마자 "호스트 sudo '는 로컬 호스트 만 사용할 수 있습니다"라는 메시지를 표시합니다. 아이디어? Ubuntu 10.04 LTS의 Emacs 23.1.1.
SabreWolfy 2011

3

로부터 부정 기선 멀티 홉 구성 웹 페이지

 (add-to-list 'tramp-default-proxies-alist
                   '(nil "\\`root\\'" "/ssh:%h:"))
      (add-to-list 'tramp-default-proxies-alist
                   '((regexp-quote (system-name)) nil nil))

그런 다음

C-x C-f /sudo:remote-host:/file

emacs를 실행하는 사용자와 동일한 사용자 이름으로 로그인 한 후 원격 시스템에서 sudo 를 사용하여 파일을 엽니 다 .


-12

먼저 서버에 ssh를 입력 한 다음 emacs를 로컬에서 실행해야합니다.

또는 no_root_squash와 함께 NFS를 사용하거나 emacs 서버 / 클라이언트로 시도 할 수 있습니다. 비록 무슨 일이 일어날 지 모르겠지만 (emacs를 직접 사용하지 마십시오)


시도했지만 일반 사용자로 마운트 할 때 sshfs를 사용하여 루트로 파일에 액세스 할 수 없습니다. 설정 문제인 것 같습니다.
Dan Andreatta 2010

Hassan이 언급했듯이 no_root_squash는주의해서 사용해야합니다.
Dan Andreatta 2010

6
질문에 답하지 않은 경우 -1. -1은 SSH 대신 NFS를 제안합니다. -1은 no_root_squash를 제안합니다. -1 원격 통신 문제에 대해 일반적으로 Unix 도메인 소켓을 사용하는 Emacs 클라이언트를 제안합니다. -1을 사용하지 않고 Emacs에 대한 블레 더링을합니다.
ceving
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.