কিভাবে ssh কমান্ড চালায়?


15

আমি ক্লায়েন্ট এবং সার্ভার উভয় ক্ষেত্রে ব্যাশ ব্যবহার করছি। যখন এসএসএইচ দিয়ে একটি কমান্ড চালাবেন:

  • ssh <host> 'declare' শেল ভেরিয়েবলের একটি তালিকা দেয়।

  • ssh <host> 'mount' মাউন্টপয়েন্টগুলির একটি তালিকা দেয়।

তবে declareএটি একটি বাশ অন্তর্নির্মিত, যদিও mountএটি একটি বাহ্যিক আদেশ। সার্ভারে শেল বিল্টিন এবং একই নামের একটি বহিরাগত কমান্ড থাকলে কীভাবে চলতে হবে তা এসএসএইচ কীভাবে জানবে?


2
ssh সর্বদা আপনার শেলটি চালান, যা এতে সঞ্চিত থাকে /etc/passwd। এটি যদি /usr/sbin/nologinআপনি লগইন করতে না পারেন
আইপোর সিরসর

উত্তর:


21

sshরান কমান্ড আপনি দূরবর্তী ব্যবহারকারীর শেল প্রদান (থেকে প্রাপ্ত /etc/passwdথেকে) দৃশ্যমান যেমন সোর্স কোড :

argv[0] = (char *) shell0;
argv[1] = "-c";
argv[2] = (char *) command;
argv[3] = NULL;
execve(shell, argv, env);

সুতরাং রিমোট সার্ভারে আপনার উদাহরণের জন্য কার্যকর করা সম্পর্কিত কমান্ডগুলি হ'ল:

  • bash -c declare
  • bash -c mount

তাদের উভয়ই পাস bashএবং মূল্যায়ন করা হয়। বিল্ট-ইনগুলির ভিতরে মূল্যায়ন করা হয় এবং বাহ্যিক কমান্ডগুলি এমনভাবে কল করা হয় যেন আপনি এটি আপনার স্থানীয় কমান্ড লাইন প্রম্পট থেকে করেন।


যদি শেলটি সর্বদা এসএসএস ডেমন দ্বারা শুরু করা হয়, তবে মজার বিষয়টি হল, যখন ব্যবহারকারী কোনও কমান্ড দিয়ে ssh কল করে, তখন শেলটি লগইন শেল নয়, এমনকি ব্যবহারকারী কোনও ধরণের লগইন সম্পাদন করে। কোন ধারণা?
Cyker

হ্যাঁ. কমান্ডটি চালিত শেলটি 1) লগইন শেল নয় 2) ইন্টারেক্টিভ নয়। আপনি -tসুইচ দ্বারা ইন্টারঅ্যাক্টিভিটি জোর করতে পারেন, তবে এটি আরসি ফাইলগুলি লোড করবে না।
জাকুজে

1
নোট করুন যে sshd(সার্ভার) এটি করছে, ssh(ক্লায়েন্ট) নয়।
ysdx

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