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
'Programming' 카테고리의 다른 글
배쉬 평등 연산자 (==, -eq) (0) | 2020.08.05 |
---|---|
ES6 구문을 사용하여 jquery를 가져 오는 방법은 무엇입니까? (0) | 2020.08.05 |
작곡가 삭제 변경 : [y, n, v, d, s ,?] (0) | 2020.08.05 |
덮어 쓰기보다는 {% 블록 %}에 추가 할 수 있습니까? (0) | 2020.08.05 |
파이썬의 Windows 경로 (0) | 2020.08.05 |