Bisakah vim mengedit file jarak jauh sebagai root?

10

Saya telah menemukan pertanyaan ini yang menjelaskan cara mengedit file jarak jauh dengan vim menggunakan:

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

Apakah mungkin untuk melakukan ini sebagai root (via sudo) pada host jarak jauh?

Saya sudah mencoba membuat file dengan izin root pada host jarak jauh dan mengeditnya dengan di atas. Vim dapat melihat konten, dapat mengeditnya, dan dapat menyimpannya tetapi tidak ada perubahan pada host jarak jauh (mungkin karena vim hanya menyimpan file temp-nya dan kemudian memberikannya ke scp untuk dimasukkan kembali?)

Ketika melakukan ini dengan file yang disimpan oleh pengguna saya berperilaku seperti yang diharapkan.

SSH saya menggunakan kunci untuk otentikasi dan server jauh memiliki NOPASSWD untuk akses sudo saya

Pertanyaan ini mirip, tetapi satu-satunya jawaban dengan suara menggunakan boneka yang jelas bukan yang ingin saya gunakan.


Sunting: Menanggapi komentar @ drewbenn di bawah ini, inilah proses lengkap saya untuk mengedit:

vim scp://nagios//tmp/notouch

Di mana /tmp/notouchfile yang dimiliki oleh root, saya melihat vim dengan cepat ditampilkan

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

Ini hilang secara otomatis untuk menghasilkan layar hitam kosong dengan teks

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

Menekan enter memungkinkan saya untuk mengedit file

Menyimpan muncul jenis yang sama dari perintah scp sebagai awal, yang dengan cepat dan otomatis hilang (sulit untuk membacanya tepat waktu tetapi file scp dan / tmp / ... sudah pasti ada)

Mitch
sumber
2
Hanya sshke server dan edit file di sana (dengan visudo, atau apa pun). Yang lain memiliki implikasi keamanan.
Satō Katsura
@SatoKatsura Saya gagal melihat implikasi keamanan nyata selain memiliki salinan file jarak jauh di localhost Anda. Saya ingin menggunakan versi lokal vim saya karena versi dan untuk .vimrcfile saya
Mitch
Mengapa tidak menggunakan manajemen konfigurasi sebagai gantinya untuk mendorong (atau menarik) file ke produksi? Kemudian Anda bisa menggunakan editor lokal Anda.
thrig
@drewbenn Saya telah memperbarui pertanyaan dengan suntingan yang menunjukkan proses lengkap yang saya gunakan
Mitch
Hmmm ... tidakkah ini berhasil? ssh -t host sudo vim file?
Kusalananda

Jawaban:

9

Saya akan mengatakan ini tidak mungkin karena vimtidak menjalankan perintah jarak jauh. Ini hanya menggunakan scpuntuk menyalin file, mengeditnya secara lokal dan scpkembali ketika selesai. Seperti yang dinyatakan dalam pertanyaan ini sudo via scptidak mungkin dan Anda disarankan untuk memodifikasi izin untuk mencapai apa yang Anda inginkan atau hanya ssh menyeberang ke mesin jarak jauh.

Zachary Brady
sumber
Bukan jawaban yang saya harapkan, tetapi sepertinya jawaban yang benar. Mungkin saya akan menulis plugin untuk menyiasati ini ..
Mitch
Hey @Mitch, apakah Anda menemukan solusi / plugin untuk mengatasi masalah Anda? Saya mengalami situasi yang persis sama! Terima kasih!
Bruno Belotti
4

Seperti jawaban yang diterima, saya pikir ini tidak mungkin secara langsung.

Namun, saya melihat setidaknya dua cara untuk tetap mencapai tujuan Anda.

Menjalankan vim dari jarak jauh

ssh user@myserver sudo vim /some/file

Ini memiliki kekurangan:

  • Interaksi Anda dengan vim masuk jaringan. Kelambatan yang signifikan akan mengganggu, dan jika koneksi Anda mati, begitu juga vim (akhirnya).
  • Ini tidak akan menggunakan konfigurasi vim lokal Anda, tetapi konfigurasi vim root jarak jauh.

Tetapi memiliki keuntungan bekerja.

Melakukan scp di luar vim

Anda bisa menyalin file itu secara lokal, mengeditnya, dan menyalinnya kembali. Dan Anda dapat mengotomatisasi itu untuk membuatnya hampir sama mulusnya dengan dukungan scp vim.

Sesuatu seperti skrip shell berikut dapat berfungsi (perhatikan, sepenuhnya belum teruji!):

#! /bin/sh

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

Ini akan memungkinkan Anda untuk melakukan sesuatu seperti rvim user@myserver /some/file. Bahkan menyimpan salinan lokal jika transfer kedua gagal, sehingga Anda tidak kehilangan perubahan Anda.

Script dapat menggunakan banyak perbaikan (paling tidak memeriksa kesalahan), tetapi ini adalah titik awal.

marcelm
sumber
3

Anda memerlukan kata sandi root atau memiliki kunci ssh publik di ~ root / .ssh / otor_keys. Setelah Anda memilikinya, Anda mungkin bisa melakukannya

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

Intinya: ini secara efektif hanya jalan pintas untuk

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

Jika Anda memiliki akses yang diperlukan untuk melakukan itu, maka Anda memiliki akses yang diperlukan untuk menggunakan plugin akses jaringan vim. Jika tidak, maka Anda tidak melakukannya.

Seperti yang ditunjukkan Zachary Brady, sudotidak terlibat. Anda memerlukan akses ssh ke akun root.

Sudahkah Anda mencobanya?

Edward Falk
sumber
1
Saya tidak memiliki kata sandi root, dan saya tidak yakin merasa nyaman memasukkan kunci saya di sana tanpa izin dari orang yang memiliki server. Pintasan sebenarnya yang dilakukan untuk saya adalah menyelamatkan saya dari ssh-ing, sudo cp-ing, scp-ing, mengedit, scp-ing, ssh-ing, sudo cp-ing (karena pengguna saya tidak dapat membaca file). sshfs mungkin cara untuk pergi ke sini
Mitch
Ada kemungkinan bagus bahwa sshfs tidak akan berfungsi baik jika Anda tidak memiliki akses ssh ke root. Sistem file jarak jauh kemungkinan akan dipasang dengan hanya izin Anda. Saya pikir pada titik ini, satu-satunya pilihan Anda adalahssh remotesystem sudo vim file
Edward Falk
Anda benar - sshfs tidak berfungsi (dan Anda menunjukkan kepada saya bahwa saya secara tidak sengaja membagi-bagikan banyak file pada diri saya yang seharusnya tidak ...) meskipun saya pikir itu berhasil
Mitch
1
@Mitch - Orang-orang yang memiliki server memberi Anda akun pengguna, dan, saya percaya, Anda bertanggung jawab untuk apa Anda menggunakan akun itu. Anda menempatkan di sana kunci publik yang dapat diakses siapa saja yang memiliki akses ke akun itu. Anda mengikat izin akun itu untuk kepemilikan kunci privat sebanyak pengetahuan yang dibolehkan kata sandi. yaitu dari sudut pandang server, tidak ada perbedaan antara memiliki kunci atau mengetahui kata sandi.
grochmal
Intinya: Saya pikir Anda benar ragu untuk meletakkan kunci publik Anda di server itu. Saya pikir Anda terjebak dengan ssh / sudo vim
Edward Falk