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

Mitch
fonte
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.

Zachary Brady
fonte
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.

marcelm
fonte
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?

Edward Falk
fonte
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