Pode vim editar um arquivo remoto como root?

9

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 o acima. O Vim pode ver o conteúdo, pode editá-lo e pode salvá-lo, mas nada muda no host remoto (provavelmente porque o vim está apenas salvando seu arquivo temporário e, em seguida, devolvendo ao scp)?

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

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

Esta questão é semelhante, mas a única resposta com votos usa fantoche que definitivamente não é o que eu quero usar.

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

vim scp://nagios//tmp/notouch

Onde /tmp/notouch é o arquivo de propriedade do root, vejo o vim mostrar rapidamente

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

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

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

Pressionar enter permite que eu edite o arquivo

Salvar aparece 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á)

    
por Mitch 27.06.2016 / 18:36

3 respostas

9

Eu vou dizer que isso não é possível porque vim não está executando comandos remotos. É simplesmente usando scp para copiar o arquivo, editá-lo localmente e scp de volta quando terminar. Como declarado em esta questão sudo via scp não é possível e é recomendável que você modifique as permissões para realizar o que está querendo ou apenas ssh na máquina remota.

    
por 27.06.2016 / 19:41
4

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

No entanto, vejo pelo menos duas maneiras de alcançar seu objetivo.

Execução do vim remotamente

ssh user@myserver sudo vim /some/file

Isso tem desvantagens:

  • Suas interações com o vim passam pela rede. Um atraso significativo será irritante e, se a conexão morrer, o mesmo acontecerá com o vim (eventualmente).
  • Isso não usará a configuração do vim local, mas a configuração do vim do root 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 de volta. E você pode automatizar isso para torná-lo quase tão simples quanto o suporte scp do vim.

Algo como o seguinte script de shell pode funcionar (note, 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 como rvim user@myserver /some/file . Até mantém a cópia local, se a segunda transferência falhar, para que você não perca suas alterações.

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

    
por 28.06.2016 / 01:07
3

Você precisaria da senha de root ou teria sua chave pública ssh em ~ root / .ssh / authorized_keys. Uma vez que você teve isso, você provavelmente poderia fazer

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

Resultado: 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, então você tem o acesso necessário para usar o plugin de acesso à rede do vim. Se não, então você não faz.

Como Zachary Brady aponta, sudo não está envolvido. Você precisará do acesso ssh à conta root.

Já experimentou?

    
por 27.06.2016 / 20:10

Tags