ฉันจะแก้ไขไฟล์จากระยะไกลผ่าน ssh ได้อย่างไร


82

ฉันต้องแก้ไขไฟล์บางไฟล์ที่วางอยู่บนเซิร์ฟเวอร์บางตัวที่ฉันสามารถเข้าถึงได้ผ่าน ssh

ฉันต้องการแก้ไขไฟล์เหล่านี้แบบกำหนดเองvimในเวิร์กสเตชันของฉัน (ฉันไม่มีสิทธิ์ในการเปลี่ยนvimการตั้งค่าบนเซิร์ฟเวอร์ระยะไกล) บางครั้งฉันต้องการแก้ไขไฟล์ด้วยsublime textหรือแก้ไข GUI อื่น ๆ

แน่นอนฉันสามารถดาวน์โหลดไฟล์เหล่านี้แก้ไขในเครื่องและอัพโหลดกลับไปยังเซิร์ฟเวอร์ มีวิธีแก้ปัญหาที่สง่างามกว่านี้ไหม?

คำตอบ:


65

คุณสามารถทำได้โดยติดตั้งโฟลเดอร์ระยะไกลเป็นระบบไฟล์โดยใช้ sshfs หากต้องการทำสิ่งนี้อันดับแรกให้มีข้อกำหนดเบื้องต้นก่อน:

# issue all these cmds on local machine
sudo apt-get install sshfs 
sudo adduser <username> fuse

ตอนนี้ทำกระบวนการติดตั้ง:

mkdir ~/remoteserv    
sshfs -o idmap=user <username>@<ipaddress>:/remotepath ~/remoteserv

หลังจากนี้ให้ไปที่โฟลเดอร์ที่เมานต์แล้วใช้เสียงเรียกเข้าที่กำหนดเองในเครื่องของคุณ


4
แปลกใจขั้นตอนการติดตั้งจะล้มเหลวในการกระจายที่ไม่ได้deb-based apt-getและด้วยเหตุนี้ไม่ได้มี (ในกรณีนี้yumหรือzypperอาจมีอยู่) พวกเขายังต้องการรูทบนเครื่องท้องถิ่นซึ่งอาจหรือไม่สามารถใช้ได้ (นี่ไม่ได้บอกว่ามันเป็นวิธีการแก้ปัญหาที่ไม่ดี แต่มันมาพร้อมกับข้อกำหนดเบื้องต้นขนาดใหญ่)
Ulrich Schwarz

4
ถูก คิดออก ทั้งหมดนี้ทำบนเครื่องโลคอล ในกรณีของ OS X หนึ่งที่มีการติดตั้งและosxfuse sshfsเหล่านี้สามารถติดตั้งกับ homebrew ( brew install sshfsและbrew cask install osxfuseหรือจากแพคเกจที่ได้รับจากosxfuse.github.io
แรงบันดาลใจ

95

คุณสามารถทำสิ่งscpนี้ผ่านทางนี้:

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

สังเกตุเห็นเครื่องหมายสแลชสองอัน//ระหว่างเซิร์ฟเวอร์และพา ธ ซึ่งจำเป็นต่อการแก้ไขพา ธ สัมบูรณ์ (เครื่องหมายทับแรกคือวากยสัมพันธ์ขณะที่เครื่องหมายทับสองระบุไดเรกทอรีรากของผู้ใช้ระยะไกลตามปกติเมื่อต้องการเริ่มต้นที่ไดเรกทอรีภายในบ้านคุณต้องทำ[:port]/~/path/to/file.txt) [:port]เป็นตัวเลือก

สิ่งนี้ถูกจัดการโดยปลั๊กอินมาตรฐานnetrw.vimของ vim รองรับโปรโตคอลอื่น ๆ อีกมากมาย


6
ใช่ไฟล์จะถูกเรียกคืนไปยังไฟล์ชั่วคราวที่ถูกอัพโหลดไปยังเซิร์ฟเวอร์เมื่อทำการบันทึก
FloHim เอง

1
ขอขอบคุณ. อย่างไรก็ตามผมได้มีข้อผิดพลาดเมื่อพยายามที่จะบันทึกไฟล์:E382: Cannot write, 'buftype' option is set
LOOM

2
คุณสามารถลอง:set buftype=""​เป็นกลุ่ม
FloHim เอง

2
นอกจากนี้กลุ่มจะอ่านและแก้ไขโฮสต์ระยะไกลด้วย~/.ssh/config vim scp://[host]/path
Jangari

2
@stillanoob::e scp://...
FloHimself

6

ขึ้นอยู่กับสิ่งที่คุณหมายถึงเมื่อคุณพูดว่าคุณไม่มีสิทธิ์ในการแก้ไขการตั้งค่า Vim อาจมีวิธีการใช้ Vim บนเซิร์ฟเวอร์ในแบบที่คุณต้องการอย่างไรก็ตาม หากคุณไม่สามารถเปลี่ยนผู้ใช้ของคุณ.vimrc(เช่นคุณเข้าสู่ระบบในฐานะผู้ใช้ที่ใช้ร่วมกัน) แต่คุณยังสามารถสร้างไฟล์สร้างมันเป็นไฟล์ที่เรียกว่าพูดLoom.vimrcแล้วโทรเป็นกลุ่มโดยใช้-uสวิตช์:

vim -u ~/Loom.vimrc file_to_edit

คุณยังสามารถใช้นามแฝงได้: alias vim='vim -u ~/Loom.vimrc'จะช่วยให้คุณใช้ Vim ได้ตามปกติและมันจะยังโหลด.vimrcไฟล์ที่คุณกำหนดเอง นามแฝงนี้จะไม่คงอยู่หลังจากที่คุณออกจากระบบดังนั้นคุณไม่จำเป็นต้องกังวลเกี่ยวกับคนอื่นโดยใช้ Vim ที่คุณกำหนดเอง


2

ขึ้นอยู่กับจำนวนไฟล์และชนิดของไฟล์ที่คุณคาดว่าจะแก้ไขนี่อาจไม่ใช่สิ่งที่คุณต้องการทำที่นี่ แต่ฉันคิดว่ามันควรค่าแก่การกล่าวถึง หากคุณต้องแก้ไขไฟล์ในเซิร์ฟเวอร์ระยะไกล แต่ต้องการใช้ทุกสิ่งที่คุณมีในสถานีทำงานของคุณเองคุณอาจต้องการเริ่มใช้ระบบRevision Controlในเครื่องของคุณ ด้วยวิธีนี้คุณสามารถแก้ไขสำเนาในเครื่องของคุณเองโดยใช้ซอฟต์แวร์ที่คุณเลือกกระทำการเปลี่ยนแปลงจากนั้นเพียงอัปเดตสำเนาภายในเครื่องในเครื่องปลายทาง นอกเหนือจากการแก้ไขไฟล์ด้วยซอฟต์แวร์ใดก็ตามที่คุณรู้สึกสบายใจคุณยังมีมูลค่าเพิ่มของการมีประวัติการเปลี่ยนแปลงที่เกี่ยวข้องกับแต่ละไฟล์ซึ่งเป็นสิ่งที่ดีเสมอ

นี่คือรายการของซอฟต์แวร์ควบคุมการแก้ไขในกรณีที่


คุณแนะนำให้ใช้สิ่งที่ต้องการยอมรับการเปลี่ยนแปลงgitผลักไปที่สิ่งที่ชอบgithubและดึงการเปลี่ยนแปลงจากgithubไปยังเครื่องท้องถิ่นของคุณเพื่อทำการเปลี่ยนแปลงที่นั่น?
alpha_989

นั่นเป็นไปได้สำหรับการเปลี่ยนแปลงรหัสที่ซับซ้อน .. แต่สำหรับการเปลี่ยนรหัสแบบง่าย ๆ บางที .. @FloHimself หรือ shivams ที่กล่าวถึงนั้นง่ายต่อการนำไปใช้ ..
alpha_989

1

หากต้องการขยายคำตอบของ Mr. Potts: คุณสามารถทำสิ่งต่าง ๆ ข้างต้นจากนั้นใส่อะไรแบบนี้ใน. bash_profile (หรือสิ่งที่เชลล์ใช้)

if [[ "$(who mom loves | awk ' { print $1 }' )" == "Loom" ]]; then 
         alias vim="vim -u ~/.Loom_vimrc"  
         fi  

โดยที่ Loom คือรหัสผู้ใช้ดั้งเดิมของคุณที่คุณลงชื่อเข้าใช้ด้วย

หากคุณลงชื่อเข้าใช้ด้วยบัญชีที่ใช้ร่วมกัน (และไม่ใช่บัญชีใดบัญชีหนึ่งแล้วใช้ sudo su-ing Von Neuman อาจจะมีเมตตาต่อจิตวิญญาณของคุณเพราะคุณหลงทาง

ฉันจะใส่ความคิดเห็นนี้ แต่ฉันไม่สามารถรับรหัสที่ฟอร์แมตได้เลย


0

หากคุณมีเซสชันเสียงเรียกใช้แล้วใช้อยู่

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

:silentในด้านหน้าจะปราบปรามPress Enter to Continueข้อความ

และ

e scp://user@myserver[:port]//path/to/file.txtเป็นExคำสั่งโหมดเพื่อแก้ไขไฟล์ remnote

ทดสอบกับการBitVise SSHDทำงานบน Windows 10 และใช้ VIM ที่ทำงานบน Ubuntu 16.04


เพียงแค่ทราบว่าสิ่งนี้จะระงับการPress Enter to Continueโหลดครั้งแรก แต่ไม่ได้สำหรับต่อมาใด ๆ:w
Sparhawk
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.