SSH লগইনে কীভাবে স্বয়ংক্রিয়ভাবে কমান্ডগুলি চালানো যায়?


13

আমি যখনই আমার লিনাক্স সার্ভারে লগইন করি তখন আমি বেশ কয়েকটি কমান্ড স্বয়ংক্রিয়ভাবে চালাতে চাই (কিছু ভেরিয়েবল সেট করে, অবস্থান পরিবর্তন করি ইত্যাদি))

এটি সিস্টেম শুরুতে নয়, ব্যবহারকারী লগইনে করা দরকার।

এটি করার জন্য আমি এটি কীভাবে সেট করতে পারি?


আপনাকে ইনভোকেশন বিভাগটি বাশ (1) ( man bash) এ পড়তে হবে ।
অ্যান্ড্রু শুলম্যান

উত্তর:


27

কমান্ডগুলি ভিতরে রাখুন ~/.bashrc। আপনি লগইন করার সময় সেখানে যে কোনও কিছু কার্যকর করা হয়।

আপনার যদি কেবল ssh- এর মাধ্যমে লগ ইন করার সময় চালানোর জন্য কমান্ডগুলির প্রয়োজন হয় (তবে শারীরিকভাবে লগ ইন করার সময় নয়), আপনি সম্ভবত SSH_CONNECTIONপরিবেশের পরিবর্তনশীল উপস্থিতির জন্য পরীক্ষা করতে পারেন , এবং যদি এটির সন্ধান পান তবে কেবল কমান্ডগুলি চালনা করতে পারেন।


আমি রুট হিসাবে লগইন করছি না, এটি একটি এডাব্লুএস সার্ভার তাই আমাকে "ইসি 2-ব্যবহারকারী" হিসাবে লগইন করতে হবে তারপরে "sudo su -" ব্যবহার করে রুটে পরিবর্তন করতে হবে। সুতরাং আমি কি "/ home/ec2-user/.bashrc" কমান্ডগুলি রেখেছি?

5
এটি ধরে নিয়েছে যে আপনার ~ / .bash_profile থেকে ~ / .bashrc স্রোস করা হয়েছে। ~ / .bash_profile স্ক্রিপ্ট হবে যা ssh এর মতো লগইন শেলের জন্য অনুরোধ করা হয়েছে। আমি বিশ্বাস করি আপনি জিনোম টার্মিনালটি খুললে ~ / .bashrc কল হবে, উদাহরণস্বরূপ, ইতিমধ্যে লগ ইন করার পরে
ডিজিগ্র্যান্ট

আপনি আমাকে বিভ্রান্ত করেছেন, আমাকে আরও ব্যাখ্যা করতে দিন: এটি একটি অ্যামাজন ওয়েব সার্ভিস উদাহরণস্বরূপ, যা কার্যত একটি সার্ভার, সুতরাং কেউ কখনও শারীরিকভাবে লগ ইন করতে পারবে না (এটি এমনকি একটি মেশিন হিসাবে শারীরিকভাবে বিদ্যমান কিনা তাও আমি নিশ্চিত নই)। আমি PTTY ব্যবহার করে ব্যবহারকারীর নাম ec2- ব্যবহারকারীর সাহায্যে লগইন করেছি। এটি আমাকে / হোম / ইসি 2-ব্যবহারকারী ডিরেক্টরিতে ফেলেছে। তারপরে আমি "sudo su -" টাইপ করে রুট ইউজারে পরিবর্তন করে যা আমাকে "/ root" এ ফেলে দেয়, তারপরে আমাকে "/ home / ec2-user" এ আবার পরিবর্তন করে কিছু সেট করে কমান্ডের একটি সিরিজ লিখতে হয় I ভেরিয়েবল, উপকরণ ইত্যাদি etc. সুতরাং ... আমি এটি এটি করতে কিভাবে পেতাম?

এছাড়াও, যেহেতু আমি ব্যবহারকারীর পরিবর্তন করছি, আমি আশা করি যে ইক্য 2-ইউজার ব্যাশ প্রোফাইলে আমার কেবল "sudo su -" রাখা উচিত, এবং তারপরে রুট বাশ ফাইলের বাকী কমান্ডগুলি রাখা উচিত?

দ্রষ্টব্য: প্রকৃতপক্ষে, এটি। প্রোফাইলে বলা হয় যে এটি উপস্থিত থাকলে, .বাশ_প্রোফাইলে উপস্থিত না থাকলে, তার পরিবর্তে তাকে বলা হয়।
ডিজিং

11

আপনি যদি সমস্ত ব্যবহারকারীর জন্য এটি চান তবে এটি কেবল ~ / .bashrc বা /etc/bash.bashrc এ রাখুন:

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

এবং কার্যকর করার পরে আমি কীভাবে অধিবেশনটি হারাব?
ই তথ্য 128

1
@ ডাব্লুএইচকে আপনি অধিবেশনটি হারানোর অর্থ কী?
লামাডেডন

@ লামেজেডন: আমার মনে হয় তিনি যে আমি একই জিনিস তা ভাবছেন। আমি যদি আমার সম্পূর্ণ এসএসএইচ সেশনটি toুকতে চাইতাম তবে আমি screenআপনার উত্তরটি ব্যবহার করতে এবং screenপ্রতিধ্বনির পরিবর্তে সেখানে রেখে দিতে পারি । এর সাথে সমস্যা হ'ল স্ক্রিন সেশনটি শেষ করে লগ আউট না করে এসএসএইচ প্রম্পটে ফিরে আসবে। কেবল এই মন্তব্যটি লিখে আমার উত্তর দিয়েছে, যদিও: logoutকমান্ডের পরে screenকমান্ড যুক্ত করুন।
জন্ডো

এটি তবে ssh সেশনের জন্য কাজ করে না যা ব্যাশ ব্যবহার করে না, যেমন আমি যখন কোনও এসএফপি সেশন খোলি।
ফ্যাবিও

@ জোন্ডো @ ই-ইনফ 128 exec commandবর্তমান শেলটি আপনার যা কিছু রান করে তা প্রতিস্থাপন করবে।
লামেজেডন

3

বিকল্প হিসাবে, আপনি এর অনুরোধের সময় চালিত একটি কমান্ড নির্দিষ্ট করতে পারেন ssh:

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

তালিকার শেষ কমান্ডটি আপনার পছন্দসই শেলটিতে একটি ইন্টারেক্টিভ সেশন শুরু করা উচিত। আপনার চালনার প্রচুর কমান্ড থাকলে আপনার এসএসএইচ সার্ভারে একটি স্ক্রিপ্ট ফাইল তৈরি করার বিষয়টি বিবেচনা করুন।


1
এটি খুব দরকারী। প্রশ্নকারীর জিজ্ঞাসা করা ঠিক উত্তরটি কিনা তা নিশ্চিত না, তবে লোকেদের এটি সম্পর্কে জানা উচিত, কারণ এটি সুস্পষ্ট নাও হতে পারে। উদাহরণস্বরূপ "ssh ব্যবহারকারী @ হোস্ট" এক্সপোর্ট এক্স = 5; বাশ "তারপরে টার্মিনালে যা প্রতিধ্বনি $ x 5 প্রদর্শিত হবে
স্পষ্টলাইট

2

~/.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.

অগত্যা। এটি এমন একটি অবস্থান যেখানে কমান্ডগুলি স্থাপন করা যায়।
ড্যানিয়েল বি


তারা আসলে কী করছে তা যদি তারা না জানত তবে এটি সত্যিই কাউকে সমস্যায় ফেলতে পারে। এটি কোণার ক্ষেত্রে সম্ভাব্যরূপে কার্যকর, তবে এটি যদি কেউ ভুলে যায় তবে তারা সেখানে কমান্ড বা সেই ফাইলটির নাম এবং পথ রেখে দিলে তা সত্যিই বিড়বিড় করতে পারে । সাধারণভাবে প্রত্যাশিত স্থানে স্টার্টআপ লগইন কমান্ডগুলি রাখার পক্ষে অগ্রাধিকার দেওয়া হবে, রিমোট সাইডে .brcrc এবং $ SSH_CONNECTION এর জন্য পরীক্ষা করা, যেমন এখানে অন্যান্য উত্তরের পরামর্শ অনুযায়ী রয়েছে।
স্পষ্টলাইট

0

প্রথমে রিমোট হোস্টে .bashrc কার্যকর করতে, তারপরে কমান্ড লাইনে পাস হওয়া কমান্ডগুলি কার্যকর করুন (যা আপনার .bashrc রিমোট হোস্টে সংজ্ঞায়িত এলিয়াস এবং ফাংশন ব্যবহার করতে সক্ষম হবে), তারপরে আপনাকে বাশ প্রম্পটে ছেড়ে যাবে (ধরে নিলে কমান্ডগুলি আপনি প্রম্পটে ফিরে বেরিয়ে যান):

$ ssh user@host "bash -lc cmd; cmd; ..."

-l বিকল্প এটি এটিকে একটি লগইন শেল করে তোলে (যেমন .bashrc চালান)

-c বিকল্পটি সরবরাহ করে সুস্পষ্ট কমান্ড বাশ চলবে

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.