เป็นกลุ่มสามารถแก้ไขไฟล์ระยะไกลเป็น root ได้หรือไม่?


10

ฉันพบคำถามนี้ที่อธิบายวิธีแก้ไขไฟล์ระยะไกลด้วย vim โดยใช้:

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

เป็นไปได้ไหมที่จะทำเช่นนี้เป็นรูท (ผ่านsudo) บนรีโมตโฮสต์

ฉันได้ลองสร้างไฟล์ด้วยการอนุญาตรูทบนรีโมตโฮสต์แล้วแก้ไขมันด้วยวิธีการข้างต้น เป็นกลุ่มสามารถดูเนื้อหาสามารถแก้ไขและสามารถบันทึกได้ แต่ไม่มีการเปลี่ยนแปลงใด ๆ ในรีโมตโฮสต์ (อาจเป็นเพราะ vim เพิ่งบันทึกไฟล์ temp ของมันแล้วมอบให้กับ scp เพื่อนำกลับมา?)

เมื่อทำสิ่งนี้กับไฟล์ที่บันทึกโดยผู้ใช้ของฉันมันจะทำงานตามที่คาดไว้

SSH ของฉันใช้คีย์เพื่อตรวจสอบสิทธิ์และเซิร์ฟเวอร์ระยะไกลมี NOPASSWD สำหรับการเข้าถึง sudo ของฉัน

คำถามนี้คล้ายกัน แต่คำตอบเดียวกับการลงคะแนนใช้หุ่นเชิดซึ่งไม่ใช่สิ่งที่ฉันต้องการใช้แน่นอน


แก้ไข: เพื่อตอบสนองต่อความคิดเห็นของ @ drewbenn ด้านล่างนี่คือกระบวนการทั้งหมดของฉันสำหรับการแก้ไข:

vim scp://nagios//tmp/notouch

ในกรณีที่/tmp/notouchเป็นไฟล์ที่เป็นเจ้าของโดยรากผมดูการแสดงได้อย่างรวดเร็วเป็นกลุ่ม

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

สิ่งนี้จะหายไปโดยอัตโนมัติเพื่อให้หน้าจอสีดำที่มีข้อความว่างเปล่า

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

การกด Enter ช่วยให้ฉันแก้ไขไฟล์ได้

การบันทึกจะแสดงคำสั่ง scp แบบเดียวกับจุดเริ่มต้นซึ่งหายไปอย่างรวดเร็วและอัตโนมัติ (เป็นการยากที่จะอ่านทันเวลา แต่มีไฟล์ scp และ / tmp / ... อยู่ที่นั่น)


2
เพียงsshไปที่เซิร์ฟเวอร์และแก้ไขไฟล์ที่นั่น (ด้วยvisudoหรืออะไรก็ตาม) สิ่งอื่นใดที่มีผลกระทบด้านความปลอดภัย
Satō Katsura

@SatoKatsura ฉันล้มเหลวที่จะเห็นผลกระทบด้านความปลอดภัยที่แท้จริงนอกเหนือไปจากการมีสำเนาของไฟล์ระยะไกลใน localhost ของคุณ ฉันต้องการใช้เสียงเรียกเข้าในรุ่นของฉันเนื่องจากรุ่นและสำหรับ.vimrcไฟล์ของฉัน
Mitch

เหตุใดจึงไม่ใช้การจัดการการกำหนดค่าเพื่อผลัก (หรือดึง) ไฟล์ออกสู่การผลิต จากนั้นคุณสามารถใช้โปรแกรมแก้ไขในเครื่องของคุณ
thrig

@drewbenn ฉันได้อัปเดตคำถามพร้อมการแก้ไขซึ่งแสดงให้เห็นถึงกระบวนการทั้งหมดที่ฉันกำลังใช้อยู่
Mitch

อืม ... มันใช้ไม่ได้เหรอ? ssh -t host sudo vim file?
Kusalananda

คำตอบ:


9

ฉันจะบอกว่านี่เป็นไปไม่ได้เพราะvimไม่ได้ดำเนินการคำสั่งระยะไกล มันเป็นเพียงการใช้scpเพื่อคัดลอกไฟล์ไปแก้ไขภายในและscpมันกลับมาเมื่อทำ ตามที่ระบุไว้ในคำถามนี้ sudoผ่านทางscpเป็นไปไม่ได้และขอแนะนำให้คุณปรับเปลี่ยนการอนุญาตเพื่อให้บรรลุสิ่งที่คุณต้องการหรือเพียงแค่ส่งไปยังเครื่องระยะไกล


ไม่ใช่คำตอบที่ฉันหวัง แต่ดูเหมือนจะเป็นคำตอบที่ถูกต้อง บางทีฉันอาจจะเขียนปลั๊กอินเพื่อรับรอบนี้ ..
มิทช์

สวัสดี @Mitch คุณพบวิธีแก้ไขปัญหา / ปลั๊กอินเพื่อแก้ไขปัญหาของคุณหรือไม่? ฉันกำลังประสบสถานการณ์เดียวกันทั้งหมด! ขอบคุณ!
Bruno Belotti

4

เช่นเดียวกับคำตอบที่ยอมรับฉันไม่คิดว่าเป็นไปได้โดยตรง

อย่างไรก็ตามฉันเห็นอย่างน้อยสองวิธีในการยังคงบรรลุเป้าหมายของคุณ

วิ่งเป็นกลุ่มจากระยะไกล

ssh user@myserver sudo vim /some/file

สิ่งนี้มีข้อเสีย:

  • การโต้ตอบกับกลุ่มของคุณผ่านเครือข่าย ความล่าช้าที่สำคัญจะน่ารำคาญและหากการเชื่อมต่อของคุณตายไปเช่นกัน (ในที่สุด)
  • สิ่งนี้จะไม่ใช้การกำหนดค่า vim ในพื้นที่ของคุณ แต่การกำหนดค่า vim ของรูทของรีโมต

แต่มันมีข้อดีของการทำงาน

ทำสำเนานอกเสียงเรียกเข้า

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

บางอย่างเช่นเชลล์สคริปต์ต่อไปนี้สามารถใช้งานได้ (หมายเหตุยังไม่ได้ทดสอบอย่างสมบูรณ์!):

#! /bin/sh

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

rvim user@myserver /some/fileนี้จะช่วยให้คุณสามารถทำสิ่งที่ชอบ มันยังเก็บสำเนาในเครื่องหากการถ่ายโอนครั้งที่สองล้มเหลวดังนั้นคุณจะไม่สูญเสียการเปลี่ยนแปลง

สคริปต์สามารถใช้การปรับปรุงจำนวนมาก (ในการตรวจสอบข้อผิดพลาดน้อยที่สุด) แต่เป็นจุดเริ่มต้น


3

คุณจะต้องใช้รหัสผ่านรูทหรือมีกุญแจสาธารณะของคุณใน ~ root / .ssh / authorized_keys เมื่อคุณทำอย่างนั้นคุณอาจจะทำ

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

Bottom line: นี่เป็นเพียงทางลัดสำหรับ

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

หากคุณมีสิทธิ์เข้าถึงที่จำเป็นในการทำเช่นนั้นคุณมีสิทธิ์เข้าถึงที่จำเป็นในการใช้ปลั๊กอินการเข้าถึงเครือข่ายของกลุ่ม ถ้าไม่เช่นนั้นคุณทำไม่ได้

ขณะที่ Zachary Brady ชี้sudoไม่เกี่ยวข้อง คุณจะต้องเข้าถึง ssh ไปที่บัญชีรูท

คุณเคยลองไหม


1
ฉันไม่มีรหัสผ่านรูทและฉันไม่แน่ใจว่าฉันรู้สึกสะดวกสบายที่จะนำกุญแจของฉันไปที่นั่นโดยไม่ได้รับอนุญาตจากผู้ที่เป็นเจ้าของเซิร์ฟเวอร์ ทางลัดจริงที่ทำเพื่อฉันคือการช่วยฉันจาก ssh-ing, sudo cp-ing, scp-ing, แก้ไข, scp-ing, ssh-ing, sudo cp-ing (เนื่องจากผู้ใช้ไม่สามารถอ่านไฟล์ได้) sshfs อาจจะเป็นวิธีที่จะไปที่นี่
มิทช์

มีโอกาสที่ดีที่ sshfs จะไม่ทำงานหากคุณไม่สามารถเข้าถึง ssh ไปยังรูทได้ ระบบไฟล์ระยะไกลน่าจะถูกเมาท์ด้วยสิทธิ์ของคุณเท่านั้น ฉันคิดว่า ณ จุดนี้ตัวเลือกเดียวของคุณคือssh remotesystem sudo vim file
Edward Falk

คุณพูดถูก - sshfs ไม่ทำงาน (และคุณชี้ให้ฉันเห็นว่าฉันบังเอิญส่งไฟล์หลายไฟล์ให้กับตัวเองซึ่งไม่ควรเป็น ... ) แต่ฉันคิดว่ามันใช้งานได้
มิทช์

1
@Mitch - คนที่เป็นเจ้าของเซิร์ฟเวอร์ให้บัญชีผู้ใช้แก่คุณและฉันเชื่อว่าคุณต้องรับผิดชอบต่อสิ่งที่คุณใช้บัญชีนั้น คุณกำลังวางกุญแจสาธารณะซึ่งใครก็ตามที่สามารถเข้าถึงบัญชีนั้นทำได้ คุณจะต้องทำการอนุญาตให้บัญชีผู้ใช้นั้นครอบครองรหัสส่วนตัวได้มากพอ ๆ กับความรู้เกี่ยวกับรหัสผ่านที่อนุญาต นั่นคือการสร้างมุมมองของเซิร์ฟเวอร์ไม่มีความแตกต่างระหว่างการมีคีย์หรือการรู้รหัสผ่าน
grochmal

บรรทัดล่าง: ฉันคิดว่าคุณถูกต้องลังเลที่จะใส่กุญแจสาธารณะของคุณบนเซิร์ฟเวอร์นั้น ฉันคิดว่าคุณติดอยู่กับ ssh / sudo vim
Edward Falk
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.