vim은 루트로 원격 파일을 편집할 수 있나요?

vim은 루트로 원격 파일을 편집할 수 있나요?

찾았어요이 문제vim을 사용하여 원격 파일을 편집하는 방법을 설명합니다.

vim scp://user@myserver[:port]//path/to/file.txt

sudo원격 호스트에서 루트(패스)로 이 작업을 수행 할 수 있습니까 ?

원격 호스트에 루트 권한으로 파일을 생성하고 위의 내용으로 편집해 보았습니다. Vim은 내용을 보고, 편집하고, 저장할 수 있지만 원격 호스트에서는 아무 것도 변경되지 않습니다. (아마도 vim이 임시 파일을 저장한 다음 다시 저장하기 위해 scp에 제공하기 때문일까요?)

내 사용자가 저장한 파일로 이 작업을 수행하면 예상대로 작동합니다.

내 SSH는 인증을 위해 키를 사용하고 원격 서버에는 sudo 액세스를 위한 NOPASSWD가 있습니다.

이 문제비슷하지만 투표가 있는 유일한 대답은 꼭두각시를 사용하는데, 이는 확실히 내가 사용하고 싶은 것이 아닙니다.


편집: 아래 @drewbenn의 의견에 대한 응답으로 전체 편집 과정은 다음과 같습니다.

vim scp://nagios//tmp/notouch

/tmp/notouch루트가 소유한 파일은 어디에 있습니까? vim이 빠르게 표시되는 것을 볼 수 있습니다.

:!scp -q 'nagios:/tmp/notouch' '/tmp/vaHhwTl/0'

그러면 자동으로 사라지고 텍스트가 포함된 빈 검정색 화면이 생성됩니다.

"/tmp/vaHhwTl/0" 1L, 12C
Press ENTER or type command to continue

파일을 편집하려면 Enter를 누르세요.

저장하면 시작된 것과 동일한 scp 명령이 나타나며 빠르게 사라집니다(제때 읽기는 어렵지만 scp 및 /tmp/... 파일은 확실히 거기에 있습니다).

답변1

vim원격 명령이 실행되지 않기 때문에 불가능하다고 말하고 싶습니다 . scp파일을 복사하고 로컬에서 편집한 후 완료 scp되면 반환합니다. 에서 언급했듯이이 문제 sudoVia scp는 불가능합니다. 원하는 것을 달성하기 위해 권한을 수정하거나 원격 시스템에 SSH로 연결하는 것이 좋습니다.

답변2

허용되는 답변과 마찬가지로 이것이 직접적으로 가능하다고 생각하지 않습니다.

그러나 나는 당신의 목표를 달성하는 데 최소한 두 가지 방법이 있다고 생각합니다.

원격으로 vim 실행

ssh user@myserver sudo vim /some/file

여기에는 단점이 있습니다.

  • vim과의 상호작용은 네트워크를 통해 이루어집니다. 눈에 띄는 지연은 짜증스러울 수 있으며 연결이 끊어지면 vim도 마찬가지입니다(결국).
  • 이는 로컬 vim 구성을 사용하지 않고 원격 루트의 vim 구성을 사용합니다.

하지만 한 가지 장점이 있는데, 바로 그것이 효과가 있다는 것입니다.

vim 외부에서 scp 실행

파일을 로컬로 복사하고 편집한 다음 다시 복사할 수 있습니다. 이를 자동화하여 vim의 scp 지원만큼 원활하게 만들 수 있습니다.

다음과 같은 쉘 스크립트가 작동합니다(참고: 완전히 테스트되지 않았습니다!).

#! /bin/sh

TMPFILE=$(mktemp)
ssh -- "$1" sudo cat "'$2'" > ${TMPFILE}
vim ${TMPFILE}
ssh -- "$1" "sudo tee '$2' > /dev/null" < ${TMPFILE} && \
  rm -f ${TMPFILE}

이렇게 하면 비슷한 작업을 수행할 수 있습니다 rvim user@myserver /some/file. 두 번째 전송이 실패하더라도 로컬 복사본을 유지하므로 변경 사항이 손실되지 않습니다.

스크립트는 많은 개선 사항(적어도 오류 검사)을 사용할 수 있지만 이는 단지 시작점일 뿐입니다.

답변3

루트 비밀번호가 필요하거나 ~root/.ssh/authorized_keys에 공개 SSH 키가 있습니다. 이것만 있으면 할 수 있을 것 같다

vim scp://root@nagios//tmp/notouch

요점: 이것은 실제로는 단지 지름길일 뿐입니다.

scp root@nagios:/tmp/notouch /tmp/notouch
vim /tmp/notouch
scp /tmp/notouch root@nagios:/tmp/notouch

이를 수행하는 데 필요한 액세스 권한이 있으면 vim의 네트워크 액세스 플러그인을 사용하는 데 필요한 액세스 권한이 있는 것입니다. 그렇지 않다면 그렇지 않을 것입니다.

재커리 브래디(Zachary Brady)가 지적했듯이 sudo그는 그 일에 아무런 역할도 하지 않았습니다. 루트 계정에 대한 SSH 액세스가 필요합니다.

시도해 보셨나요?

답변4

이 해결 방법의 전제 조건(scp 대신 rsync 사용): 원격 시스템에서 Passwordless1을 설정
해야 합니다 .sudo

1.) 먼저 로컬 vim 설정에서 rsync 명령을 변경합니다.

:let g:netrw_rsync_cmd='rsync --rsync-path="sudo rsync"'

따라서 "rsync"뿐만 아니라 원격 호스트에서 "sudo rsync"를 수행하십시오.:h netrw-externapp

2.) 파일 읽기:
호스트 이름 뒤에는 vim처럼 쓰면 :/filename안 됩니다 .//filename

:e rsync://myhost.net:/etc/apt/sources.list

3.) 파일에 쓰기

:e rsync://myhost.net:/etc/apt/sources.list

x.) 가능한 오류를 인쇄하려면 다음을 사용하십시오.

:verbose e rsync://myhost.net:/etc/my_file

관련 정보