Vim uzak bir dosyayı kök olarak düzenleyebilir mi?


10

Vim kullanarak uzak bir dosyayı nasıl düzenleyeceğinizi açıklayan bu soruyu buldum :

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

Bunu sudouzak ana bilgisayarda root (yoluyla ) yapmak mümkün müdür ?

Uzak ana bilgisayarda kök izinleri olan bir dosya oluşturmayı ve yukarıdaki ile düzenlemeyi denedim. Vim içeriği görebilir, düzenleyebilir ve kaydedebilir, ancak uzak ana bilgisayarda hiçbir şey değişmez (muhtemelen vim geçici dosyasını kaydettiği ve daha sonra geri koymak için scp'ye verdiği için mi?)

Bunu benim kullanıcı tarafından kaydedilen bir dosya ile yaparken beklendiği gibi davranır.

SSH'm kimlik doğrulaması için bir anahtar kullanıyor ve uzak sunucuda sudo erişimim için NOPASSWD var

Bu soru benzer, ancak oylarla verilen tek cevap kesinlikle kullanmak istediğim şey olmayan kukla kullanıyor.


Düzenleme: @ drewbenn'in aşağıdaki yorumuna yanıt olarak, düzenleme için tam işlemim:

vim scp://nagios//tmp/notouch

/tmp/notouchKökün sahip olduğu dosya nerede , vim'in hızlı bir şekilde gösterildiğini görüyorum

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

Bu, metinle birlikte boş bir siyah ekran elde etmek için otomatik olarak kaybolur

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

Enter tuşuna basmak dosyayı düzenlememe izin veriyor

Kaydetme, başlangıçla aynı tür scp komutunu açar, bu da hızlı ve otomatik olarak kaybolur (zamanında okumak zordur, ancak scp ve / tmp / ... dosyaları kesinlikle oradadır)


2
Sadece sshsunucuya gidin ve dosyayı orada düzenleyin (ile visudoveya her neyse). Başka herhangi bir şeyin güvenlikle ilgili sonuçları vardır.
Satō Katsura

@SatoKatsura Uzak ana dosyanızın bir kopyasını localhost üzerinde bulundurmak dışında herhangi bir gerçek güvenlik etkisi göremiyorum. Ben nedeniyle sürümüne ve benim için vim benim yerel sürümünü kullanmak istiyorsanız .vimrcdosyanın
Mitch

Bunun yerine neden dosyaları üretime göndermek (veya çekmek) için yapılandırma yönetimini kullanmıyorsunuz? Sonra sadece yerel editörünüzü kullanabilirsiniz.
hırsızlık

@drewbenn Soruyu, kullandığım tüm işlemi gösteren bir düzenleme ile güncelledim
Mitch

Hmmm ... bu çalışmıyor mu? ssh -t host sudo vim file?
Kusalananda

Yanıtlar:


9

Bunun mümkün olmadığını söyleyeceğim çünkü vim uzak komutları yürütmüyor. Sadece scpdosyayı kopyalamak, yerel olarak düzenlemek ve scpbittiğinde geri düzenlemek için kullanılır . Bu soruda belirtildiği gibi sudoüzerinden scpmümkün değildir ve ne istediğinizi gerçekleştirmek için izinleri değiştirmeniz veya uzak makineye yalnızca ssh yapmanız önerilir.


Umduğum cevap değil, doğru gibi görünüyor. Belki bunu aşmak için bir eklenti yazacağım ..
Mitch

Hey @Mitch, sorununuzu çözmek için herhangi bir çözüm / eklenti buldunuz mu? Tamamen aynı durumu yaşıyorum! Teşekkürler!
Bruno Belotti

4

Kabul edilen cevap gibi, bunun doğrudan mümkün olduğunu sanmıyorum.

Ancak, yine de hedefinize ulaşmak için en az iki yol görüyorum.

Vim'i uzaktan çalıştırmak

ssh user@myserver sudo vim /some/file

Bunun dezavantajları vardır:

  • Vim ile etkileşimleriniz ağ üzerinden gerçekleşir. Önemli gecikme rahatsız edici olacaktır ve bağlantınız koparsa, vim de (sonunda).
  • Bu, yerel vim yapılandırmanızı değil, uzaktan kumandanın kökünün vim yapılandırmasını kullanmaz.

Ancak çalışmanın avantajı var.

SCP'yi vim dışında yapmak

Dosyayı yerel olarak kopyalayabilir, düzenleyebilir ve geri kopyalayabilirsiniz. Ve bunu neredeyse vim'in scp desteği kadar kesintisiz hale getirmek için otomatikleştirebilirsiniz.

Aşağıdaki kabuk betiği gibi bir şey işe yarayabilir (not, tamamen denenmemiş!):

#! /bin/sh

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

Bu, böyle bir şey yapmanıza izin verir rvim user@myserver /some/file. İkinci aktarım başarısız olursa yerel kopyayı bile tutar, böylece değişikliklerinizi kaybetmezsiniz.

Komut dosyası birçok iyileştirmeyi kullanabilir (en azından hata denetiminde), ancak bu bir başlangıç ​​noktasıdır.


3

Kök parolasına ihtiyacınız olacak veya genel ssh anahtarınızın ~ root / .ssh / yetkili_anahtarları içinde olması gerekir. Bunu yaptıktan sonra, muhtemelen

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

Alt satır: Bu sadece etkili bir kısayol

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

Bunu yapmak için gerekli erişiminiz varsa, vim'in ağ erişim eklentisini kullanmak için gerekli erişiminiz vardır. Değilse, yapmazsınız.

Zachary Brady'nin belirttiği gibi, sudodahil değildir. Kök hesabına ssh erişiminiz olması gerekir.

Bunu denediniz mi?


1
Kök şifrem yok ve sunucumun sahibi olan kişilerin izni olmadan anahtarımı oraya koymakta rahat hissetmiyorum. Benim için yaptığı gerçek kısayol beni ssh-ing, sudo cp-ing, scp-ing, düzenleme, scp-ing, ssh-ing, sudo cp-ing'den kurtarıyor (kullanıcım dosyayı okuyamayacağı için). sshfs buraya gitmek için bir yol olabilir
Mitch

Köklere ssh erişiminiz yoksa sshf'lerin çalışmaz olma olasılığı yüksektir. Uzak dosya sistemi büyük olasılıkla yalnızca izinlerinizle bağlanır. Sanırım bu noktada tek seçeneğinizssh remotesystem sudo vim file
Edward Falk

Haklısın - sshfs çalışmıyor (ve yanlışlıkla çalışmam gerektiğini düşündüğüm halde kendime yanlışlıkla bir grup dosya seçtiğimi söyledin ...)
Mitch

1
@Mitch - Sunucunun sahibi olan kullanıcılar size bir kullanıcı hesabı verdi ve inanıyorum ki bu hesabı ne için kullandığınızdan siz sorumlusunuz. Bu hesaba erişimi olan herkesin kullanabileceği bir ortak anahtar yerleştiriyorsunuz . Bu hesabın izinlerini, şifre bilgisinin izin verdiği ölçüde özel anahtara sahip olursunuz. yani sunucunun bakış açısını oluşturmak, bir anahtara sahip olmak veya şifreyi bilmek arasında bir fark yoktur.
grochmal

Alt satır: Bence genel anahtarınızı bu sunucuya koymaktan çekinmeyin. Sanırım ssh / sudo vim ile sıkışmışsın
Edward Falk
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.