Ssh कनेक्शन के बाद सर्वर में स्क्रिप्ट स्वचालित रूप से चलाएँ


11

क्लाइंट सिस्टम द्वारा सर्वर के साथ ssh कनेक्शन स्थापित करने के तुरंत बाद सर्वर में स्क्रिप्ट को स्वचालित रूप से कैसे चलाया जाए

पूर्व के लिए: मान लीजिए कि कोई उपयोगकर्ता ssh कनेक्शन का उपयोग करके किसी अन्य सिस्टम (लैन के माध्यम से जुड़ा हुआ) से मेरे कंप्यूटर पर लॉग ऑन करेगा। उस समय, एक स्क्रिप्ट (अजगर या खोल) को कुछ सत्यापन करने के लिए मेरे सिस्टम में स्वचालित रूप से चलाया जाना चाहिए?

सर्वर सिस्टम में स्क्रिप्ट को स्वचालित रूप से कैसे चलाएं?


जवाबों:


14

आप निम्न पैरामीटर को अपनी कॉन्फ़िग फ़ाइल (/ etc / ssh / sshd_config) में जोड़कर कर सकते हैं।

 ForceCommand
         Forces the execution of the command specified by ForceCommand, ignoring any command supplied by the client and ~/.ssh/rc if present.  The command is invoked by using the user's login shell
         with the -c option.  This applies to shell, command, or subsystem execution.  It is most useful inside a Match block.  The command originally supplied by the client is available in the
         SSH_ORIGINAL_COMMAND environment variable.  Specifying a command of “internal-sftp” will force the use of an in-process sftp server that requires no support files when used with
         ChrootDirectory.

एक अन्य विकल्प प्रति उपयोगकर्ता के आधार पर .ssh / rc फ़ाइलों का उपयोग करना है।

ForceCommand विधि का उपयोग करने के लिए आप बस ForceCommand /usr/bin/ownscriptफ़ाइल के नीचे /etc/ssh/sshd_config(सर्वर पर) जोड़ें।

स्क्रिप्ट इस प्रकार है:

#!/bin/bash
#Script file for ssh
#
#put your commands here
echo "test" > /tmp/test.txt
#
#exit by calling a shell to open for the ssh session
/bin/bash

स्क्रिप्ट को भूल जाना मत sudo chmod +x /usr/bin/ownscript


जवाब के लिए धन्यवाद। क्या आप कृपया एक उदाहरण कमांड दे सकते हैं
उत्साही

लेकिन क्या फोर्स कमांड सर्वर (एडमिन लॉगिन) में कमांड को निष्पादित करता है या क्लाइंट लॉगिन में? मैं सर्वर लॉगिन में कमांड निष्पादित करना चाहता हूं
उत्साही

1
आदेश सर्वर पर जारी किया जाता है। बस अपने विन्यास के निचले भाग में ForceCommand /path/command.script जोड़ें, चाल चलेगा। हालाँकि, मुझे लगा कि यह इस कमांड को निष्पादित करेगा, इसलिए आपको अपने स्क्रिप्टफाइल में एक शेल शुरू करने की आवश्यकता है। बेहतर पठनीयता के लिए मैं अपने मूल उत्तर के लिए एक उदाहरण जोड़ूंगा।
निवेदक

धन्यवाद। क्या मैं शेल स्क्रिप्ट के बजाय अजगर स्क्रिप्ट चला सकता हूं?
उत्साही

मान लीजिए कि मैं अपने कस्टम कमांड को निष्पादित करता हूं, क्या उपयोगकर्ता के आईपी पते और लॉगिन नाम को पुनः प्राप्त करने का कोई तरीका है (मैं जानना चाहता हूं कि मेरे आदेश को किस लॉगिन से निष्पादित किया गया है?
उत्साही

4

आप एक /etc/ssh/sshrcफ़ाइल बना सकते हैं । देखते हैं man 8 ssh। यदि आप एकल उपयोगकर्ता के लिए यह चाहते हैं, तो उपयोग करें ~/.ssh/rc

यहां एक नमूना है /etc/ssh/sshrcजो किसी मशीन में लॉग इन करने पर आपको डब के माध्यम से सूचित करेगा। इसे मत भूलना chmod +x:

#!/bin/bash

ip=`echo $SSH_CONNECTION | cut -d " " -f 1`

notify-send -u CRITICAL "SSH connection from ${ip}" "User $USER just logged in from $ip"

1

लॉगऑन के दौरान स्क्रिप्ट के निष्पादन के लिए, इसे / etc / प्रोफाइल स्क्रिप्ट के भीतर से कॉल के रूप में जोड़ें। यह हर लॉगऑन के लिए निष्पादित होता है, न केवल ssh logons के लिए।


मैं केवल क्लाइंट सिस्टम के बारे में चिंतित हूं जो ssh कनेक्शन का उपयोग करके जुड़ा हुआ है
सरगर्म

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