O vim pode editar um arquivo remoto como root?


10

Eu encontrei esta pergunta que explica como editar um arquivo remoto com o vim usando:

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

É possível fazer isso como root (via sudo) no host remoto?

Eu tentei criar um arquivo com permissões de root no host remoto e editá-lo com os itens acima. O Vim pode ver o conteúdo, editá-lo e salvá-lo, mas nada muda no host remoto (provavelmente porque o vim está apenas salvando seu arquivo temporário e depois entregando ao scp para colocar de volta?)

Ao fazer isso com um arquivo salvo pelo meu usuário, ele se comporta conforme o esperado.

Meu SSH usa uma chave para autenticar e o servidor remoto possui NOPASSWD para acesso ao meu sudo

Essa pergunta é semelhante, mas a única resposta com votos usa fantoches, que definitivamente não é o que eu quero usar.


Edit: Em resposta ao comentário de @ drewbenn abaixo, aqui está o meu processo completo de edição:

vim scp://nagios//tmp/notouch

Onde /tmp/notoucho arquivo pertence ao root, vejo o vim mostrar rapidamente

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

Isso desaparece automaticamente para gerar uma tela preta vazia com o texto

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

Pressionar enter permite editar o arquivo

O salvamento exibe o mesmo tipo de comando scp do início, que desaparece rápida e automaticamente (é difícil lê-lo a tempo, mas os arquivos scp e / tmp / ... estão definitivamente lá)


2
Apenas sshno servidor e edite o arquivo lá (com visudoou o que for). Qualquer outra coisa tem implicações de segurança.
— Satō Katsura

@SatoKatsura Não vejo implicações reais de segurança além de ter uma cópia do arquivo remoto no seu host local. Eu quero usar minha versão local do vim devido à versão e para o meu .vimrcarquivo #
— 275 Mitch Mitch

Por que não usar o gerenciamento de configuração para enviar (ou extrair) os arquivos para produção? Então você pode apenas usar o seu editor local.
— thrig

@drewbenn Atualizei a pergunta com uma edição mostrando o processo completo que estou usando #
— Mitch Mitch

Hmmm ... isso não funciona? ssh -t host sudo vim file?
— Kusalananda

Respostas:


9

Vou dizer que isso não é possível porque vimnão está executando comandos remotos. É simplesmente usar scppara copiar o arquivo, editá-lo localmente e scpvoltar quando estiver pronto. Conforme declarado nesta pergunta, sudo via scpnão é possível e é recomendável que você modifique as permissões para realizar o que deseja ou apenas faça o ssh na máquina remota.


Não é a resposta que eu esperava, mas parece ser a correta. Talvez eu escreva um plug-in para contornar isso .. #
— 276 Mitch Mitch

Hey @Mitch, você encontrou alguma solução / plugin para solucionar seu problema? Estou enfrentando exatamente a mesma situação! Obrigado!
— Bruno Belotti

4

Como a resposta aceita, não acho que isso seja possível diretamente.

No entanto, vejo pelo menos duas maneiras de ainda atingir seu objetivo.

Executando o vim remotamente

ssh user@myserver sudo vim /some/file

Isso tem desvantagens:

  • Suas interações com o vim passam pela rede. Atraso significativo será irritante e, se a sua conexão acabar, o vim (eventualmente).
  • Isso não usará sua configuração local do vim, mas a configuração do vim raiz do controle remoto.

Mas tem a vantagem de trabalhar.

Fazendo o scp fora do vim

Você pode simplesmente copiar o arquivo localmente, editá-lo e copiá-lo novamente. E você pode automatizar isso para torná-lo quase tão perfeito quanto o suporte scp do vim.

Algo como o seguinte script de shell pode funcionar (observe, totalmente não testado!):

#! /bin/sh

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

Isso permitiria que você fizesse algo assim rvim user@myserver /some/file. Ele ainda mantém a cópia local se a segunda transferência falhar, para que você não perca as alterações.

O script pode usar muitas melhorias (no mínimo, na verificação de erros), mas é um ponto de partida.


3

Você precisaria da senha root ou teria sua chave pública ssh em ~ root / .ssh / allowed_keys. Depois de ter isso, você provavelmente poderia fazer

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

Conclusão: este é efetivamente apenas um atalho para

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

Se você tiver o acesso necessário para fazer isso, terá o acesso necessário para usar o plug-in de acesso à rede do vim. Se não, então você não.

Como Zachary Brady aponta, sudonão está envolvido. Você precisará de acesso ssh à conta raiz.

Tentaste?


1
Não tenho a senha de root e não tenho certeza se me sinto à vontade em colocar minha chave lá sem a permissão das pessoas que possuem o servidor. O verdadeiro atalho que está fazendo para mim está me salvando de ssh-ing, sudo cp-ing, scp-ing, edição, scp-ing, ssh-ing, sudo cp-ing (como meu usuário não pode ler o arquivo). sshfs pode ser o caminho para ir para lá
— Mitch

Há uma boa chance de que o sshfs também não funcione se você não tiver acesso ao ssh no root. O sistema de arquivos remoto provavelmente seria montado apenas com suas permissões. Eu acho que neste momento, sua única opção éssh remotesystem sudo vim file
— Edward Falk

Você está certo - o sshfs não funciona (e você apontou para mim que acidentalmente havia arquivado para mim um monte de arquivos que não deveriam ter sido ...) embora eu achasse que estava funcionando
— Mitch

1
@ Mitch - As pessoas que possuem o servidor deram a você uma conta de usuário e, creio, você é responsável pelo uso dessa conta. Você está colocando lá uma chave pública que qualquer pessoa com acesso a essa conta poderia. Você está vinculando as permissões dessa conta à posse da chave privada, tanto quanto o conhecimento da senha permitir. ou seja, do ponto de vista do servidor, não há diferença entre ter uma chave ou saber a senha.
— grochmal

Conclusão: acho que você está certo em hesitar em colocar sua chave pública nesse servidor. Eu acho que você está preso com ssh / sudo vim
— Edward Falk
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.