SSH लॉगिन पर स्वचालित रूप से कमांड कैसे चलाएं?


18

जब भी मैं अपने लिनक्स सर्वर में लॉगिन करता हूं, तो मैं कई कमांड अपने आप चलाना चाहता हूं (कुछ वैरिएबल सेट करें, स्थान बदलें, आदि)

यह उपयोगकर्ता लॉगिन पर किया जाना चाहिए, न कि सिस्टम स्टार्ट पर।

मैं इसे करने के लिए इसे कैसे सेट कर सकता हूं?


आपको bash (1) ( man bash) में सेक्शन INVOCATION पढ़ना होगा ।
एंड्रयू शुल्मन

जवाबों:


31

आज्ञाओं को अंदर रखो ~/.bashrc। जब भी आप लॉग इन करते हैं, वहां कुछ भी निष्पादित होता है।

यदि आपको ssh के माध्यम से लॉगिंग करते समय केवल कमांड चलाने की आवश्यकता है (लेकिन जब भौतिक रूप से लॉगिंग नहीं होती है), तो आप शायद SSH_CONNECTIONपर्यावरण चर की उपस्थिति के लिए परीक्षण कर सकते हैं , और केवल कमांड को चला सकते हैं यदि आप इसे मौजूद पाते हैं।


मैं रूट के रूप में लॉग इन नहीं कर रहा हूं, यह AWS सर्वर है इसलिए मुझे "ec2-user" के रूप में लॉगिन करना होगा, फिर "sudo su -" का उपयोग करके रूट में बदलना होगा। तो क्या मुझे "/home/ec2-user/.bashrc" में कमांड डालनी चाहिए?

5
यह मानता है ~ / .bashrc आपके ~ / .bash_profile से सॉर्ट किया गया है। ~ / .bash_profile वह स्क्रिप्ट होगी जो ssh जैसे लॉगिन शेल के लिए मंगाई जाती है। मेरा मानना ​​है कि ~ / .bashrc आपको बुलाया जाएगा यदि आप एक गनोम टर्मिनल खोलते हैं, उदाहरण के लिए, पहले से ही लॉग इन होने के बाद।
6:15 बजे नागा

आपने मुझे भ्रमित किया है, मुझे और अधिक समझाने दें: यह एक अमेज़ॅन वेब सेवा का उदाहरण है, जो एक वस्तुतः सर्वर है, इसलिए कोई भी कभी भी भौतिक रूप से लॉग इन नहीं करेगा (मुझे यकीन नहीं है कि यह भौतिक रूप से एक मशीन के रूप में मौजूद है)। मैं उपयोगकर्ता नाम ec2-user के साथ PUTTY का उपयोग कर लॉगिन करता हूं। यह मुझे / home / ec2-user निर्देशिका में छोड़ता है। मैं फिर "sudo su -" लिखकर रूट यूजर को बदल देता हूं, जो फिर मुझे "/ root" में छोड़ देता है, फिर मुझे कमांड की एक श्रृंखला टाइप करनी होती है, जिसमें मुझे वापस "/ home / ec2-user" में बदलना और कुछ सेट करना शामिल है चर, उपनाम, आदि। तो ... मुझे यह करने के लिए कैसे मिलेगा?

इसके अलावा, जब से मैं उपयोगकर्ता बदल रहा हूं, मुझे उम्मीद है कि ec2-user bash प्रोफाइल में मुझे केवल "sudo su -" डालना चाहिए, और फिर रूट bash फ़ाइल में बाकी कमांड्स?

ध्यान दें: वास्तव में, यह .profile है कि कहा जाता है अगर यह मौजूद है, जब तक .bash_profile, मौजूद है, तब इसे इसके बजाय कहा जाता है।
6

14

अगर आप यह सभी उपयोगकर्ताओं के लिए चाहते हैं तो इसे ~ / .bashrc या /etc/bash.bashrc में डालें:

if [[ -n $SSH_CONNECTION ]] ; then
    echo "I'm logged in remotely"
fi

और मैं निष्पादन बंद करने के बाद सत्र कैसे खो सकता हूं?
ई-जानकारी128

1
@HK सत्र गंवाने से आपका क्या मतलब है?
लेलमेडेडॉन

@Llamageddon: मुझे लगता है कि वह वही बात सोच रहा है जो मैं कर रहा हूं। यदि मैं अपना संपूर्ण SSH सत्र लगाना चाहता हूं screen, तो मैं आपके उत्तर का उपयोग कर सकता हूं और screenवहां प्रतिध्वनि की जगह रख सकता हूं । इसके साथ समस्या यह है कि स्क्रीन सत्र समाप्त करने से लॉग आउट करने के बजाय SSH प्रॉम्प्ट पर वापस आ जाएगा। बस इस टिप्पणी को लिखने से मुझे जवाब मिला, हालांकि: logoutकमांड के बाद कमांड जोड़ें screen
13

यह हालांकि ssh सत्र के लिए काम नहीं करता है जो bash का उपयोग नहीं करता है, उदाहरण के लिए जब मैं sftp सत्र खोलता हूं।
फाबियो

@zondo @ e-info128 exec commandआपके द्वारा चलाए जा रहे मौजूदा शेल को बदल देगा।
लेलमेडेडोंड

6

वैकल्पिक रूप से, आप के आह्वान के दौरान चलाने के लिए एक कमांड निर्दिष्ट कर सकते हैं ssh:

$ ssh -t server 'cmd; exec bash -l'

सूची में अंतिम कमांड को आपके पसंदीदा शेल में एक इंटरैक्टिव सत्र शुरू करना चाहिए। यदि आपके पास चलाने के लिए बहुत सारी कमांड हैं, तो अपने SSH सर्वर पर एक स्क्रिप्ट फ़ाइल बनाने पर विचार करें।


1
यह बहुत उपयोगी है। निश्चित रूप से यदि यह प्रश्नकर्ता द्वारा पूछा गया उत्तर नहीं है, लेकिन लोगों को इसके बारे में पता होना चाहिए, क्योंकि यह स्पष्ट नहीं हो सकता है। उदाहरण के लिए "ssh user @ host" Export x = 5; बैश "फिर टर्मिनल में जो $ 1
एक्सो

3

वास्तव में ~/.ssh/rcएक सही जगह आप चलाने के लिए आदेश जोड़ने के लिए जब है आप में प्रवेश करें, बल्कि प्रणाली के किसी भी उपयोगकर्ता से।

 ~/.ssh/rc
         Commands in this file are executed by ssh when the user logs in,
         just before the user's shell (or command) is started.  See the
         sshd(8) manual page for more information.

जरुरी नहीं। यह एक ऐसा स्थान है जहां कमांड रखी जा सकती है।
डैनियल बी


अगर वे नहीं जानते कि वे क्या कर रहे हैं, तो वास्तव में कोई मुसीबत में पड़ सकता है। यह कोने मामलों में संभावित रूप से उपयोगी है, लेकिन वह कर सकता है वास्तव में गड़बड़ किसी को अगर वे भूल गया वे आदेशों वहाँ रख सकते हैं या नाम और उस फ़ाइल का पथ। सामान्य तौर पर स्टार्टअप लॉगिन कमांड्स को अपेक्षित स्थान पर रखने के लिए अत्यधिक पसंद किया जाएगा। रिमोट पर .bashrc और $ SSH_CONNECTION के लिए परीक्षण करें, जैसा कि अन्य उत्तरों ने यहां सुझाया है।
clearlight
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.