vim이 원격 파일을 루트로 편집 할 수 있습니까?


10

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 / ... 파일은 확실히 있습니다)


2
그냥 ssh서버와 편집 (에이 파일을 visudo, 또는 무엇이든). 다른 것은 보안에 영향을 미칩니다.
Satō Katsura

@SatoKatsura 로컬 호스트에 원격 파일 사본을 가지고있는 것 이외의 실제 보안 관련 사항을 보지 못했습니다. 버전 및 .vimrc파일 로 인해 로컬 버전의 vim을 사용하고 싶습니다
Mitch

대신 구성 관리를 사용하여 파일을 프로덕션으로 푸시 (또는 풀)하지 않습니까? 그런 다음 로컬 편집기를 사용할 수 있습니다.
thrig

@drewbenn 나는 사용중인 전체 프로세스를 보여주는 편집으로 질문을 업데이트했습니다.
Mitch

흠 ...이 작동하지 않습니까? ssh -t host sudo vim file?
Kusalananda

답변:


9

vim원격 명령을 실행하지 않기 때문에 이것이 불가능하다고 말하려고 합니다. 단순히 scp파일을 복사하고 로컬에서 편집 한 다음 scp완료되면 다시 사용하는 것입니다. 이 질문 에서 알 수 있듯이 sudovia scp는 불가능하며 원하는 것을 달성하기 위해 권한을 수정하거나 원격 시스템으로 ssh하는 것이 좋습니다.


내가 바라는 대답은 아니지만 올바른 대답 인 것 같습니다. 어쩌면 나는이 문제를 해결하기 위해 플러그인을 작성합니다 ..
Mitch

@Mitch, 문제를 해결할 솔루션 / 플러그인을 찾았습니까? 나는 정확히 같은 상황을 경험하고 있습니다! 감사!
Bruno Belotti

4

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

그러나 목표를 달성하기위한 최소한 두 가지 방법이 있습니다.

vim을 원격으로 실행

ssh user@myserver sudo vim /some/file

단점이 있습니다.

  • vim과의 상호 작용은 네트워크를 통해 진행됩니다. 상당한 지연이 성가 시게되며 연결이 끊어지면 vim도 결과적으로 사라집니다.
  • 이것은 로컬 vim 설정을 사용하지 않고 remote의 루트 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 액세스 권한이 필요합니다.

사용해 보셨습니까?


1
루트 암호가없고 서버를 소유 한 사람들의 허락없이 키를 넣는 것이 편하다고 확신하지 않습니다. 그것이 나를 위해하고있는 진정한 지름길은 ssh-ing, sudo cp-ing, scp-ing, edit, scp-ing, ssh-ing, sudo cp-ing (사용자가 파일을 읽을 수 없기 때문에)에서 나를 구하는 것입니다. SSHFS 여기에 갈 수있는 방법이 될 수있다
미치

루트에 대한 ssh 액세스 권한이 없으면 sshfs가 작동하지 않을 가능성이 높습니다. 원격 파일 시스템은 권한만으로 마운트 될 수 있습니다. 이 시점에서 당신의 유일한 선택은ssh remotesystem sudo vim file
Edward Falk

맞습니다-sshfs가 작동하지 않습니다 (그리고 실수로해서는 안되는 많은 파일을 실수로 나에게 가져 왔음을 지적했습니다 ...)
Mitch

1
@Mitch-서버를 소유 한 사람들이 사용자 계정을 제공했으며 해당 계정의 용도에 대해 책임을 져야합니다. 해당 계정에 대한 액세스 권한이있는 모든 사람이 사용할 수 있는 공개 키 가 있습니다. 비밀번호에 대한 지식이 허용하는 한 개인 키를 소유하기 위해 해당 계정의 권한을 묶고 있습니다. 즉, 서버의 관점에서 키를 갖는 것과 암호를 아는 것 사이에는 차이가 없습니다.
grochmal

결론 : 나는 당신이 그 서버에 공개 키를 넣는 것을 망설이는 것이 맞다고 생각합니다. 나는 당신이 ssh / sudo vim에 갇혀 있다고 생각합니다
Edward Falk
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.