ssh + sudo + su ลงในเชลล์ล็อกอิน


11

ฉันมีเครื่องหลายเครื่องที่ฉันใช้เป็นประจำเท่านั้นsudo suเพื่อใช้ในส่วนที่เหลือของการเข้าสู่ระบบในฐานะผู้ใช้ที่มีวัตถุประสงค์พิเศษ เวิร์กโฟลว์ทั่วไปคือ:

mymachine:~ me$ ssh me@othermachine
othermachine:~ me$ sudo su - specialuser # note: no password needed
othermachine:~ specialuser$ # do stuff

ฉันต้องการต้มสิ่งนี้ลงในสายการบินเดียวที่ฉันสามารถใช้นามแฝงได้ดังนั้นฉันจึงสามารถตั้งชื่อแทนสำหรับแต่ละเครื่องและไปยังตำแหน่งที่ฉันต้องเป็นคำสั่งเดียวโดยไม่ต้องพิมพ์sudo su - specialuserหม้อต้ม ฉันอาจตั้งค่าme@othermachineให้ใช้sudo suในการเข้าสู่ระบบ แต่ฉันต้องการที่จะรักษาความยืดหยุ่นในการทำงานราวกับmeว่าฉันต้องการ

( หมายเหตุ:ฉันไม่มีการควบคุมใด ๆothermachineหรือวิธีการตั้งค่านี่เป็นขั้นตอนการทำงานที่กำหนดไว้ที่ฉันเข้ามาเมื่อฉันถูกว่าจ้าง)

ความคิดแรกของฉันเป็นเพียงแค่

ssh me@othermachine "sudo su - specialuser"

และงานประเภทนี้ แต่มันทำให้ฉันพรอมต์ไม่^Cฆ่าและออกจากระบบและฉันคิดว่าสิ่งอื่น ๆ อีกมากมายอาจผิดด้วย

หลังจากอ่านคำสั่ง Run Remote ssh ด้วย Full Login Shellฉันลองสิ่งแปลกใหม่สองสามอย่างเช่น

ssh me@othermachine 'bash -l -c "sudo su - specialuser"'

และ

ssh me@othermachine 'bash -l -c "sudo su - specialuser"; bash'

- ทั้งที่ฉันคาดว่าจะทำงานและพวกเขาไม่ได้ แต่ฉันคิดว่าฉันควรลองพวกเขาเพื่อความสมบูรณ์ (และเพื่อหลีกเลี่ยงการซ้ำซ้อนใกล้) พวกเขาสร้างกระสุนพรอมต์ที่น้อยลงเหมือนกัน (ที่สองพร้อมกับโบนัสเพิ่มที่ไม่ต้องใช้กระสุนสำหรับการmeไล่หลังจากexitที่หนึ่งสำหรับspecialuser) และฉันพยายาม

ssh me@othermachine "sudo su - specialuser -c bash -l"

แต่มันก็ทำให้ฉัน

sudo: no tty present and no askpass program specified

ความคิดที่ดีกว่า


สิ่งที่เกี่ยวกับการเพิ่มคำสั่ง sudo ~/.profileหลังจากล่าช้าเล็กน้อย?
อเล็กซ์

ความคิดที่ว่าในกรณีที่แปลกฉันไม่ต้องการsudoฉันควรจะตี^C? ถ้าฉันไม่สามารถคิดอะไรได้ดีกว่านี้ฉันก็ลองทำดู
David Moles

1
คุณสามารถจากsu me specialuserหรือใน.profileหรือ.bashrcถ้าคุณไม่ทำตามsudoด้วยสิ่ง exitแรกของคุณexitจะนำคุณกลับไปmeพร้อมกับวินาทีเพื่อสิ้นสุดเซสชัน หรือแม้กระทั่งการใช้แฟ้มธงเพื่อsudoจะนำหน้าด้วย[ -f ~/.keep.me ] && del ~/.keep.meและตามด้วย[ \! -f ~/.keep.me ] && exit: แล้วคุณต้องการเพียงสคริปต์หรือนามแฝงสำหรับคำสั่งเป็นme :>~/.keep.me; exitตอนนี้exitจะสิ้นสุดเซสชันของคุณและmeจะกลับไปที่เซสชันการเข้าสู่ระบบของคุณ
AFH

1
โปรดพิจารณาเขียนในรุ่นสุดท้ายของคุณ/bin/bashและไม่ใช่เรื่องง่ายbashสำหรับเหตุผลด้านความปลอดภัย (เพื่อหลีกเลี่ยงโทรจัน ) โดยเฉพาะอย่างยิ่งถ้ามีsudoมาก่อน ...
Hastur

คำตอบ:


11

บรรทัดนี้ควรใช้กับคุณ

ssh -t me@machine "sudo su - specialuser" 

วิธีแก้ปัญหานี้ให้ฉันทันทีหรือไม่ขึ้นอยู่กับ-tสวิตช์

ssh -t me@machine "/bin/bash -l"   # Give me a prompt

ssh  me@machine "/bin/bash -l"     # Give me NO prompt
ssh  me@machine                    # Give me NO prompt

หมายเหตุจาก man ssh

-t
Force การจัดสรรหลอก tty สิ่งนี้สามารถใช้เพื่อรันโปรแกรมบนหน้าจอโดยพลการบนเครื่องระยะไกลซึ่งมีประโยชน์มากเช่นเมื่อใช้งานบริการเมนู ตัวเลือก -t จัดสรรแรง TTY หลายแม้ว่า SSH ไม่มี TTY


สิ่งนี้ใช้ได้กับฉัน ... สามารถทำได้ผ่านการตั้งค่าโฮสต์ ~ / .ssh / config ที่เฉพาะเจาะจงด้วยหรือไม่
เฮ้

1
ที่ใดก็ได้ใช่คุณสามารถทำได้ด้วยRequestTTY force(ซึ่งเท่ากับ-t) และRemoteCommand sudo su - specialuser! อย่างไรก็ตามโปรดทราบว่าโปรแกรมอื่น ๆ ที่ใช้ SSH (เช่น scp, rsync ฯลฯ ) จะไม่ทำงานอย่างถูกต้องสำหรับโฮสต์นี้อีกต่อไป
Robert Riedl
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.