Vim có thể chỉnh sửa một tập tin từ xa như root?


10

Tôi đã tìm thấy câu hỏi này giải thích cách chỉnh sửa tệp từ xa bằng vim bằng cách sử dụng:

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

Có thể làm điều này như root (thông qua sudo) trên máy chủ từ xa?

Tôi đã thử tạo một tệp có quyền root trên máy chủ từ xa và chỉnh sửa nó bằng cách ở trên. Vim có thể xem nội dung, có thể chỉnh sửa nội dung và có thể lưu nội dung nhưng không có gì thay đổi trên máy chủ từ xa (có lẽ vì vim chỉ lưu tệp tạm thời của nó và sau đó đưa nó vào scp để đặt lại?)

Khi làm điều này với một tập tin được lưu bởi người dùng của tôi, nó hoạt động như mong đợi.

SSH của tôi sử dụng khóa để xác thực và máy chủ từ xa có NOPASSWD để truy cập sudo của tôi

Câu hỏi này tương tự, nhưng câu trả lời duy nhất với phiếu bầu sử dụng con rối chắc chắn không phải là điều tôi muốn sử dụng.


Chỉnh sửa: Đáp lại bình luận của @ drewbenn bên dưới, đây là toàn bộ quá trình chỉnh sửa của tôi:

vim scp://nagios//tmp/notouch

Trong trường hợp /tmp/notouchđược các tập tin sở hữu bởi root, tôi thấy một cách nhanh chóng cho thấy vim

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

Điều này tự động biến mất để mang lại một màn hình đen trống rỗng với văn bản

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

Nhấn enter cho phép tôi chỉnh sửa tập tin

Việc lưu bật lên cùng loại lệnh scp như lúc ban đầu, nó sẽ nhanh chóng tự động biến mất (thật khó để đọc kịp thời nhưng các tệp scp và / tmp / ... chắc chắn là có)


2
Chỉ cần sshđến máy chủ và chỉnh sửa tệp ở đó (với visudo, hoặc bất cứ điều gì). Bất cứ điều gì khác có ý nghĩa bảo mật.
Satō Katsura

@SatoKatsura Tôi không thấy bất kỳ ý nghĩa bảo mật thực sự nào ngoài việc có một bản sao của tệp từ xa trên localhost của bạn. Tôi muốn sử dụng phiên bản vim cục bộ của mình do phiên bản và cho .vimrctệp của tôi
Mitch

Tại sao không sử dụng quản lý cấu hình để đẩy (hoặc kéo) các tệp ra sản xuất? Sau đó, bạn chỉ có thể sử dụng trình soạn thảo địa phương của bạn.
thrig

@drewbenn Tôi đã cập nhật câu hỏi với một chỉnh sửa hiển thị toàn bộ quá trình tôi đang sử dụng
Mitch

Hmmm ... không phải công việc này? ssh -t host sudo vim file?
Kusalananda

Câu trả lời:


9

Tôi sẽ nói điều này là không thể bởi vì vimkhông thực thi các lệnh từ xa. Nó chỉ đơn giản là sử dụng scpđể sao chép tập tin qua, chỉnh sửa cục bộ và scpquay lại khi hoàn tất. Như đã nêu trong câu hỏi này sudo thông qua scplà không thể và bạn nên sửa đổi các quyền để thực hiện những gì bạn muốn hoặc chỉ ssh qua máy từ xa.


Không phải là câu trả lời tôi đã hy vọng, nhưng dường như là câu trả lời đúng. Có lẽ tôi sẽ viết một plugin để khắc phục điều này ..
Mitch

Xin chào @Mitch, bạn đã tìm thấy giải pháp / plugin nào để giải quyết vấn đề của mình chưa? Tôi đang trải nghiệm chính xác tình huống tương tự! Cảm ơn!
Bruno Belotti

4

Giống như câu trả lời được chấp nhận, tôi không nghĩ rằng điều này là có thể trực tiếp.

Tuy nhiên, tôi thấy ít nhất hai cách để vẫn hoàn thành mục tiêu của mình.

Chạy vim từ xa

ssh user@myserver sudo vim /some/file

Điều này có nhược điểm:

  • Tương tác của bạn với vim đi qua mạng. Độ trễ đáng kể sẽ gây khó chịu và nếu kết nối của bạn chết, vim (cuối cùng) cũng vậy.
  • Điều này sẽ không sử dụng cấu hình vim cục bộ của bạn, nhưng cấu hình vim gốc của điều khiển từ xa.

Nhưng nó có lợi thế làm việc.

Làm scp ngoài vim

Bạn chỉ có thể sao chép tệp qua cục bộ, chỉnh sửa và sao chép lại. Và bạn có thể tự động hóa điều đó để làm cho nó gần như liền mạch như hỗ trợ scp của vim.

Một cái gì đó giống như tập lệnh shell sau đây có thể hoạt động (lưu ý, chưa được kiểm tra đầy đủ!):

#! /bin/sh

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

Điều này sẽ cho phép bạn làm một cái gì đó như rvim user@myserver /some/file. Nó thậm chí còn giữ bản sao cục bộ nếu lần chuyển thứ hai thất bại, vì vậy bạn không bị mất các thay đổi của mình.

Kịch bản có thể sử dụng nhiều cải tiến (ít nhất là kiểm tra lỗi), nhưng đó là điểm khởi đầu.


3

Bạn sẽ cần mật khẩu gốc hoặc có khóa ssh công khai của bạn trong ~ root / .ssh / ủy quyền. Một khi bạn đã có điều đó, bạn có thể có thể làm

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

Tóm lại: đây thực sự chỉ là một phím tắt cho

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

Nếu bạn có quyền truy cập cần thiết để làm điều đó, thì bạn có quyền truy cập cần thiết để sử dụng plugin truy cập mạng của vim. Nếu không, thì bạn không.

Như Zachary Brady chỉ ra, sudokhông liên quan. Bạn sẽ cần quyền truy cập ssh vào tài khoản root.

Bạn đã thử chưa?


1
Tôi không có mật khẩu gốc và tôi không chắc mình cảm thấy thoải mái khi đặt chìa khóa của mình vào đó mà không có sự cho phép của những người sở hữu máy chủ. Phím tắt thực sự mà tôi đang làm là cứu tôi khỏi ssh-ing, sudo cp-ing, scp-ing, chỉnh sửa, scp-ing, ssh-ing, sudo cp-ing (vì người dùng của tôi không thể đọc tệp). sshfs có thể là cách để đi đến đây
Mitch

Có một cơ hội tốt rằng sshfs sẽ không hoạt động nếu bạn không có quyền truy cập ssh vào root. Hệ thống tệp từ xa có thể sẽ được gắn chỉ với quyền của bạn. Tôi nghĩ tại thời điểm này, lựa chọn duy nhất của bạn làssh remotesystem sudo vim file
Edward Falk

Bạn nói đúng - sshfs không hoạt động (và bạn đã chỉ ra cho tôi rằng tôi đã vô tình tạo ra một loạt các tệp cho chính mình mà không nên ...) mặc dù tôi nghĩ rằng nó đang hoạt động
Mitch

1
@Mitch - Những người sở hữu máy chủ đã cấp cho bạn một tài khoản người dùng và, tôi tin rằng, bạn có trách nhiệm với những gì bạn sử dụng tài khoản đó. Bạn đang đặt ở đó một khóa công khai mà bất kỳ ai có quyền truy cập vào tài khoản đó đều có thể. Bạn đang buộc các quyền của tài khoản đó sở hữu khóa riêng giống như kiến ​​thức về mật khẩu cho phép. tức là hình thành quan điểm của máy chủ, không có sự khác biệt giữa việc có khóa hoặc biết mật khẩu.
hóa dầu

Điểm mấu chốt: Tôi nghĩ bạn có quyền ngần ngại đặt khóa công khai của mình trên máy chủ đó. Tôi nghĩ rằng bạn đang bị mắc kẹt với ssh / sudo vim
Edward Falk
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.