SSH का उपयोग करने वाले शेल का चयन?


31

मैं उस शेल को कैसे सेट करता हूं जिसका उपयोग किसी सर्वर के उपयोगकर्ता SSH के लिए किया जाता है। उदाहरण के लिए, मैं BASH नहीं खड़ा कर सकता और ZSH का उपयोग करने की आवश्यकता है, मैं इसे कैसे बनाऊंगा ताकि ZSH मेरी प्रोफ़ाइल ( .zsh_profile) के साथ लोड हो जाए जब मैं मशीन पर भेजूं।

मैं ssh के साथ या तो मापदंडों का एक गुच्छा पारित नहीं करना चाहता, क्या मैं डिफ़ॉल्ट शेल सेट नहीं कर सकता हूं?

जवाबों:


34

यह मानते हुए कि आप लिनक्स पर चल रहे हैं, आप chshकमांड का उपयोग कर सकते हैं ।

chsh -s /bin/ksh foo
chsh -s /bin/bash username

4
कृपया ध्यान दें कि /etc/shellsशेल को चयन करने योग्य होने के लिए बाइनरी के लिए पथ होना चाहिए।
किम्विस

Ubuntu 16.04 में यह कमांड नहीं है।
david.perez 8

@ david.perez हाँ, यह में करता है, पैकेजpasswd
मिठाई

यह काम नहीं करता है जब प्रमाणीकरण LDAP के माध्यम से नियंत्रित किया जाता है
डैनियल कैट्स

10

man chsh शेल बदलता है, हमेशा काम नहीं करता है

वैकल्पिक रूप से, आप exec /bin/zshअपने बैश लॉगिन स्क्रिप्ट में छड़ी कर सकते हैं । यह आपके शेल के साथ बैश इंस्टेंस को बदल देगा।

या आप कर सकते हैं ssh host "zsh -l"


क्यों -1 (15 वर्ण ...)?
नौफाल इब्राहिम

यह एक कम मामला हैL
21

1
ssh -tअंतिम विकल्पों के लिए TTY प्राप्त करना आवश्यक है। डिफ़ॉल्ट रूप से यदि कोई कमांड (जैसे zsh -l) प्रदान की जाती है, तो OpenSSH एक गैर-लॉगिन शेल करेगा, जो आपके लिए TTY आवंटित -lनहीं करेगा , और इसे परिवर्तित नहीं करेगा (क्योंकि लॉग के बाद निष्पादित किया जाता है)।
फ्रैंकलिन यू

8

अपने डिफ़ॉल्ट शेल को बदलने के लिए संपादित करें / etc / passwd (यदि आपके पास अधिकार हैं, या अपने सिस्टम व्यवस्थापक से पूछें)।


कुछ कारणों से जिन उपयोगकर्ताओं को मैंने हाल ही में बनाया है उनमें कोई डिफ़ॉल्ट शेल नहीं था। इसने मेरे लिए काम किया। धन्यवाद।
मिमोरालिया

2
धन्यवाद यह उत्तर बहुत अच्छा है। मेरे पास यहां कोई शेल नहीं था। मैंने लाइन myusername: x: 1000: 1000 :: / home / myusername: और अंत में जोड़ा / बिन / बैश पाया। लॉग आउट करें और अंदर और मेरा ssh सत्र bash का उपयोग कर रहा है :)
स्टीवर्ट इवांस

6

यदि आप अपना डिफ़ॉल्ट शेल नहीं बदल सकते हैं, तो ssh -t user@host 'zsh -l'काम करता है।

-tझंडा एक छद्म tty आवंटन, और मजबूर करता -lझंडा spawns एक लॉगिन खोल


4

मुझे यकीन नहीं है कि आप अपने स्थानीय .zshrcको दूरस्थ सर्वर में कैसे डाल सकते हैं , (यह स्थायी रूप से इसे वहां संग्रहीत किए बिना है), यह मेरे लिए दूरस्थ सर्वर पर अपने लॉगिन शेल को बदलने के लिए काम करता है।

चूंकि यह एक साझा खाता है, मैं zshकेवल इस पद्धति के साथ अपने लिए उपयोग कर सकता हूं।

इसे ~/.ssh/configअपनी स्थानीय मशीन में अपनी फ़ाइल में जोड़ें ।

Host yourServer
    HostName <IP, FQDN or DNS resolvable name>
    IdentityFile ~/.ssh/<your keyfile>
    RemoteCommand zsh -l
    RequestTTY force
    User <yourUsername>

नीचे की तरह, जो आप देख रहे हैं, उसे पूरा करने के लिए हैकिंग तरीका हो सकता है।

चेतावनी यह कोई गारंटी के साथ आता है और 'बुद्धिमान' नहीं दिखता है, हालांकि मैंने सर्वर के लिए अपनी स्थानीय फ़ाइल डालने और इसे उपयोग करने के लिए लॉगिन शेल में स्रोत बनाने में कामयाब रहा।

Host someHost
    HostName someIP
    IdentityFile ~/.ssh/somekey.pem
    RemoteCommand zsh -l -c 'sleep 1; source /tmp/somefile; zsh'
    PermitLocalCommand yes
    LocalCommand bash -c 'sftp %r@%h <<< "put /tmp/somefile /tmp/somefile"'
    RequestTTY force
    User someUser

यह काम किस प्रकार करता है?

  • RemoteCommand यह परिभाषित करता है कि रिमोट पर चलने की क्या आवश्यकता है।
  • LocalCommandपरिभाषित करता है कि स्थानीय पर चलाने की क्या आवश्यकता है, जो आपकी स्थानीय फ़ाइल को दूरस्थ सर्वर पर कॉपी करने के लिए उपयोग किया जाता है। यहाँ पकड़ है, यह दूरस्थ मेजबान के 'सफल' कनेक्शन के बाद ही होता है।

अर्थ:

  1. आपका रिमोट से कनेक्शन खुला और जीवित होना चाहिए
  2. आपके दूरस्थ शेल में अभी तक फ़ाइल नहीं है, इसलिए इसे तब तक इंतजार करना होगा जब तक कि फ़ाइल वहां न हो, इरगो sleep
  3. आपका स्थानीय उपयोग sftpआपकी फ़ाइल को दूरस्थ सर्वर में रखने के लिए करता है, दूरस्थ सर्वर sleepआपकी स्क्रिप्ट से जागता है और स्रोत बनाता है।

यह सुपर हैकिश है, मैं जानना चाहूंगा कि क्या कोई बेहतर तरीका है, भी।

अपडेट: इसका उपयोग 'लंबे' सोने के समय के बजाय किया जा सकता है:
RemoteCommand zsh -l -c 'while [[ ! -f /tmp/somefile ]]; do sleep 0.05; done; source /tmp/somefile; zsh'

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.