मेरा पसंदीदा तरीका SSH कॉन्फ़िग फ़ाइल (नीचे वर्णित) का उपयोग कर रहा है, लेकिन आपके उपयोग के आधार पर कुछ संभव समाधान हैं।
कमांड लाइन तर्क
मुझे लगता है कि इस दृष्टिकोण के लिए सबसे अच्छा उत्तर क्रिस्चियनबॉडी का स्वीकृत उत्तर है:
ssh -t example.com "cd /foo/bar; exec \$SHELL -l"
दोहरे उद्धरण चिह्नों का उपयोग करने से आप अपनी स्थानीय मशीन से चर का उपयोग कर सकते हैं, जब तक कि वे बच न जाएं (जैसा $SHELL
कि यहां है)। वैकल्पिक रूप से, आप एकल उद्धरणों का उपयोग कर सकते हैं, और आपके द्वारा उपयोग किए जाने वाले सभी चर लक्ष्य मशीन से होंगे:
ssh -t example.com 'cd /foo/bar; exec $SHELL -l'
बैश समारोह
आप इसे bash फंक्शन में रैप करके कमांड को सरल बना सकते हैं। मान लें कि आप इसे टाइप करना चाहते हैं:
sshcd example.com /foo/bar
इसे आप अपने काम से जोड़कर बना सकते हैं ~/.bashrc
:
sshcd () { ssh -t "$1" "cd \"$2\"; exec \$SHELL -l"; }
यदि आप एक चर का उपयोग कर रहे हैं जो निर्देशिका के लिए दूरस्थ मशीन पर मौजूद है, तो इसे बचना सुनिश्चित करें या इसे एकल उद्धरण में रखें। उदाहरण के लिए, यह निर्देशिका के लिए सीडी होगी JBOSS_HOME
जो रिमोट मशीन पर चर में संग्रहीत है :
sshcd example.com \$JBOSS_HOME
SSH कॉन्फ़िग फ़ाइल
यदि आप विशिष्ट कमांड लाइन तर्क का उपयोग किए बिना सामान्य ssh कमांड के साथ विशिष्ट (या किसी भी) होस्ट के लिए हर समय इस व्यवहार को देखना चाहते हैं, तो आप अपनी ssh config फाइल में विकल्प RequestTTY
और RemoteCommand
विकल्प सेट कर सकते हैं ।
उदाहरण के लिए, मैं केवल यह कमांड टाइप करना चाहता हूं:
ssh qaapps18
लेकिन यह हमेशा इस आदेश की तरह व्यवहार करना चाहते हैं:
ssh -t qaapps18 'cd $JBOSS_HOME; exec $SHELL'
इसलिए मैंने इसे अपनी ~/.ssh/config
फ़ाइल में जोड़ा :
Host *apps*
RequestTTY yes
RemoteCommand cd $JBOSS_HOME; exec $SHELL
अब यह नियम किसी भी होस्ट के लिए "होस्ट" में उसके होस्टनाम पर लागू होता है।
अधिक जानकारी के लिए, http://man7.org/linux/man-pages/man5/ssh_config.5.html देखें