찾았어요이 문제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
되면 반환합니다. 에서 언급했듯이이 문제 sudo
Via 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