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इसे मारता है और मुझे लॉग आउट करता है, और मुझे लगता है कि विभिन्न अन्य चीजें संभवतः गलत भी हैं।

फुल लॉगइन शेल के साथ रन रिमोट ssh कमांड पढ़ने के बाद मैंने कुछ अधिक विदेशी चीजों की तरह कोशिश की

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

बेहतर विचार?


~/.profileथोड़ी देर के बाद सूडो कमांड को जोड़ने के बारे में क्या ?
एलेक्स

यह विचार यह है कि विषम स्थिति में मैं नहीं चाहता कि sudoमुझे मारा जाए ^C? अगर मैं कुछ भी बेहतर नहीं कर सकता हूं तो मैं कोशिश कर सकता हूं।
डेविड मोल्स

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
बल छद्म tty आवंटन। इसका उपयोग रिमोट मशीन पर मनमाने ढंग से स्क्रीन-आधारित कार्यक्रमों को निष्पादित करने के लिए किया जा सकता है, जो मेनू सेवाओं को लागू करते समय बहुत उपयोगी हो सकता है। एकाधिक-विकल्प विकल्प tty आवंटन को बाध्य करते हैं, भले ही ssh के पास कोई स्थानीय tty न हो


यह मेरे लिए काम करता है ... यह मेजबान विशिष्ट ~ /। Ssh / config सेटिंग के माध्यम से भी किया जा सकता है?
अरे

1
@ जगह, हाँ आप ऐसा कर सकते हैं RequestTTY force(जो बराबर -t) और RemoteCommand sudo su - specialuser! हालाँकि, इस बात से अवगत रहें कि SSH (जैसे scp, rsync, आदि) का उपयोग करने वाले अन्य प्रोग्राम इस होस्ट के लिए ठीक से काम नहीं करेंगे।
रॉबर्ट रीडल
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.