ssh_config: ระบุคำสั่งที่จะดำเนินการบนเครื่องระยะไกลเมื่อเข้าสู่ระบบ


16

นี่คือการขยายตัวของฉันก่อนหน้าคำถาม ฉันจำเป็นต้องเรียกใช้คำสั่งที่เก็บไว้ในเครื่อง (เช่นmount /home) บนเครื่องระยะไกลเมื่อเข้าสู่ระบบ ssh ในขณะนี้ฉันกำลังใช้:

ssh -t mymachine.example.com 'mount /home ; /bin/bash'

ซึ่งใช้งานได้ดี แต่ฉันสงสัยว่าฉันสามารถใช้คำสั่งนี้.ssh/configเพื่อให้ฉันไม่ต้องพิมพ์ทุกครั้ง ฉันพบLocalCommandตัวเลือก แต่ฉันไม่เห็นRemoteCommandตัวเลือกใด ๆ

มันเป็นสิ่งสำคัญที่command-to-be-executedจะถูกเก็บไว้ในเครื่องท้องถิ่นเพราะมันจะมีรหัสผ่านเพื่อเปิดดิสก์ที่เข้ารหัส นั่นคือเหตุผลที่ฉันไม่สามารถใส่คำสั่งลง.profileในเครื่องระยะไกล

คำตอบ:


6

คำถามนี้ถูกถามมาก่อนใน SuperUser คำตอบแรกใช้ไฟล์ระยะไกลที่ไม่ตรงกับความต้องการของคุณ แต่คำตอบที่สองที่แนะนำให้ใช้นามแฝงเฉพาะที่อาจเป็นวิธีแก้ปัญหาของคุณ

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

สิ่งนี้อาจไม่ปลอดภัย หากฉันใช้echoคำสั่งเป็นคำสั่ง ssh คำสั่งนั้นจะปรากฏในpsเซิร์ฟเวอร์ระยะไกล:

martin@martin ~ % ssh dev2 "echo hello; ps aux|grep echo"

hello
root     25358  0.0  0.0   5848  1296 ?        Ss   11:27   0:00 bash -c echo hello; ps aux|grep echo
root     25362  0.0  0.0   5012   828 ?        S    11:27   0:00 grep echo

ขอบคุณ แต่ในการแก้ปัญหาใน SuperUser ~/.ssh/rcจะถูกเก็บไว้อีกครั้งบนเครื่องระยะไกล เกี่ยวกับความคิดเห็นของคุณเกี่ยวกับการpsแสดงพารามิเตอร์บรรทัดคำสั่งของฉัน (รวมถึงรหัสผ่าน) ที่ไม่รบกวนฉัน เป็นเครื่องระยะไกลที่ฉันไม่ไว้วางใจ เครื่องของฉันถูกใช้โดยตัวเองเท่านั้นดังนั้นจึงไม่มีใครสามารถเข้าถึงpsได้
Martin Vegter

6
ที่psส่งออกเป็นจากเครื่องระยะไกล ประเด็นคือ: ทุกสิ่งที่คุณจัดหาให้sshเป็นคำสั่งระยะไกลจะปรากฏขึ้นบนเซิร์ฟเวอร์ระยะไกลpsมา
Martin von Wittich

1
ใช่คุณถูก. ขอบคุณที่ชี้นำสิ่งนี้
Martin Vegter

1
@MartinvonWittich - แต่ละไซต์ SE มีความเป็นอิสระดังนั้นจึงเป็นที่ยอมรับโดยสมบูรณ์สำหรับแต่ละไซต์เพื่อให้มีคิวและเอที่คล้ายกันตราบใดที่พวกเขาอยู่ในหัวข้อสำหรับไซต์นั้น ขอแนะนำให้คัดลอกเนื้อหาหากมีคิวถามขึ้นและกลุ่ม A อยู่ในไซต์ SE อื่น ปรับแต่งมันตามความเหมาะสมดังนั้นจึงอยู่ในหัวข้อ
slm

7

สิ่งนี้ถูกเพิ่มเข้ามาใน OpenSSH 7.6:

เพิ่มตัวเลือก RemoteCommand เพื่อระบุคำสั่งในไฟล์ ssh config แทนที่จะให้คำสั่งบนบรรทัดคำสั่งของลูกค้า สิ่งนี้อนุญาตให้ไฟล์คอนฟิกูเรชันระบุคำสั่งที่จะถูกเรียกใช้งานบนรีโมตโฮสต์

อ้างอิง: https://www.openssh.com/txt/release-7.6



2

คุณสามารถทำได้ด้วยความร่วมมือของเครื่องระยะไกลดังนี้

LC_SSH_INITIAL_COMMANDบนเครื่องของคุณสิ่งที่คำสั่งให้ทำงานในตัวแปรสภาพแวดล้อม ปกติแล้ว SSH จะถูกกำหนดค่าให้ส่งผ่านตัวแปรสภาพแวดล้อมทั้งหมดของฟอร์มLC_*เนื่องจากโดยทั่วไปจะเป็นการตั้งค่าตำแหน่งที่ตั้ง

บนเครื่องระยะไกลให้เรียกใช้eval "$LC_SSH_INITIAL_COMMAND" ผ่านการตั้งค่าต่อคีย์ใน~/.ssh/authorized_keysหรือจาก~/.ssh/rc(ระวังว่าถ้าคุณมี~/.ssh/rcไฟล์คุณต้องดูแลการทำงานxauthด้วยตนเองสำหรับการส่งต่อ X11)

ด้วยauthorized_keysวิธีการนี้คุณสามารถเรียกใช้คำสั่งในทำนองเดียวกันเมื่อเซสชัน SSH ออก (ยกเว้นกรณีที่กระบวนการเชลล์ถูกฆ่าอย่างกะทันหันคุณควรดักสัญญาณ HUP อย่างน้อยที่สุดเพื่อให้คำสั่งของคุณถูกดำเนินการแม้ว่าการเชื่อมต่อจะตาย)

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


0

ฉันไม่ได้ลอง แต่อาจเป็นวิธีการ

  • ประกาศ a Subsystemบนรีโมตsshd_configที่เรียกใช้งานคำสั่งที่คุณต้องการโดยการอ่าน env vars
  • ใช้SendEnvบนโลคัล.ssh/configเพื่อส่งคีย์ดังกล่าวไปยังเซิร์ฟเวอร์รีโมต
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.