Programming

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

procodes 2020. 8. 5. 21:33
반응형

Emacs로 SSH 및 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가 서버에 설치되어 있지 않습니다


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

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

새로운 구문에서는 각 'hop'이로 구분됩니다 |. 매뉴얼의 예는 다음과 같습니다.

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:파일을로 요청할 때마다 프록시 가 사용됨을 의미합니다 root@remotehost.

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

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

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

호스트 이름 을 사용 sudo::하거나 su::생략하는 데 익숙 할 것입니다 . 로컬 호스트에 머무르는 경우 여전히 문제가 없지만 원격 서버 로 이동하는 경우 이전 홉과 동일하더라도 모든 홉의 호스트 이름을 지정 해야합니다 . 항상 sudo:hostname:또는 su:hostname:원격 호스트를 사용하십시오.

여기서 트랩 sudo:: 실제로 작동하는 것으로 보입니다. 그러나 그렇게하면 동적 프록시 항목 의 호스트가 연결된 호스트가 아닌 원래 호스트 이름이 됩니다. 파일 경로에 잘못된 호스트가 표시되므로 혼란 스러울뿐만 아니라 sudo::로컬 호스트 에서 사용하려는 모든 후속 시도가 원격 서버로 프록시됩니다. (두 번째 서버에서 동일한 작업을 수행하면 추가 문제가 발생하는 경우 프록시가 아마도 엉망이 될 것입니다).

간단히 말해서 ::멀티 홉을 할 때는 사용하지 마십시오 !


업데이트 :이 답변은 원래의 문제를 해결했지만 이맥스 20 또는 21을 위해 작성되었습니다. 이맥스 24의 경우 필자 는 더 자세한 설명과 최신 정보를 제공하므로 필스의 답변 을 사용하는 것이 좋습니다 .


내가 생각하는 멀티 홉 파일 이름 바람둥이의 당신이 찾고있는 것입니다.

첫 번째 홉은 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

선택한 답변에 문제가있었습니다. 그러나이 줄을 .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


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

 (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사용하여 파일을 엽니 다 .


먼저 서버를 ssh해야하고 emacs를 로컬로 실행해야합니다.

또는 no_root_squash와 함께 NFS를 사용하거나 emacs 서버 / 클라이언트를 사용해 볼 수 있습니다.

참고 URL : https://stackoverflow.com/questions/2177687/open-file-via-ssh-and-sudo-with-emacs

반응형