ইন্টারেক্টিভ মোডে যাওয়ার আগে ssh সেশন শুরু করার সময় আমি কি কিছু কমান্ড কার্যকর করতে পারি?


13

Ssh কমান্ড দিয়ে ssh অধিবেশন শুরু করার সময় আমার কাছে দুটি বিকল্প রয়েছে বলে মনে হয় - ডিফল্ট এনভির সাথে ডিফল্ট ইন্টারেক্টিভ সেশন এবং হোম ডিরেক্টরি থেকে শুরু করে - বা স্বেচ্ছাসেবী কমান্ড চালাতে কিন্তু অ-ইন্টারেক্টিভভাবে (এমনকি ট্রিকগুলিও ssh "command; command; bash -i -l"তেমন ভাল কাজ করে না বলে মনে হয়)। বেশিরভাগ সময় আমি ইন্টারেক্টিভ সেশন চাই, তবে এর আগে কিছু ঘটতে থাকে - সাধারণত একটি ডিরেক্টরি পরিবর্তন হয়, বা কখনও কখনও সিস্টেমের পরিবেশগত সমন্বয় হয়। এই জিনিসগুলি অধিবেশন থেকে অধিবেশন পরিবর্তিত হতে পারে, তাই আমি কেবল এগুলিতে .bashrcবা এগুলি আটকে রাখতে পারি না ।

এটি করার কোনও উপায় আছে কি?

উত্তর:


13

আমি স্ব-উত্তর দিচ্ছি, কারণ আমি অবশেষে গোপনীয়তাটি আবিষ্কার করেছি। আমরাও -tজন্য বিকল্প ssh, কিংবা -lজন্য বিকল্প bashতাদের নিজস্ব লগ-ইন শেল হতে হবে - কিন্তু সমন্বয় তারা কাজ হবে।

ssh user@host.com -t 'cd /some/where; FOO=BAR NUMBER=42 bash -l'ডিরেক্টরি পরিবর্তন করে, পরিবেশের ভেরিয়েবলগুলি সেট করে এবং তারপরে সঠিক লগইন শেলটি শুরু হয় (আমি এখনও অবধি খুঁজে পেলাম কেবলমাত্র এই পার্থক্যটি এইভাবে /etc/motdপ্রদর্শিত হয় না - এটি সাধারণত নিজের sshবা loginদায়বদ্ধতার নয় bash, সমস্ত কিছু বলে মনে হয়) নিখুঁতভাবে কাজ করতে এবং সমস্ত পরিবেশগত পরিবর্তনশীল অভিন্ন)।

এই পরিবেশ / ডিরেক্টরি পরিবর্তনগুলি ssh এর পরে ঘটে, সুতরাং সেগুলি PermitUserEnvironmentএবং সম্পর্কিত সেটিংস দ্বারা সীমাবদ্ধ নয় (ঠিক পরিকল্পনা অনুসারে), তবে .bashrc/ .profileকার্যকর করার আগে । এতে উত্সাহ এবং ডাউনসাইড রয়েছে - বাশ ইনিশ স্ক্রিপ্টগুলি থেকে সেট করা এমন PS1কোনও কিছুকে ওভাররাইড করা শক্ত , তবে sshকমান্ড লাইনে সঠিক মানগুলি প্যাক করা সহজ এবং .profileসমস্ত ভারী উত্তোলন করা সম্ভব।

এবং যদি সত্যিই প্রয়োজন .profileহয় তবে কমান্ড লাইনের পরে কিছু কার্যকর করার জন্য বাশ পাওয়া খুব সহজ easy সেই পথে রাখলে ssh user@foo.com -t 'cd /mnt; echo ". ~/.bash_profile; PS1=\"\\h-\w \"" >~/xxx; bash --init-file ~/xxx'খুব কুৎসিত হয় তবে এই বিকল্প .profileফাইলগুলি আগে প্রস্তুত করা যেতে পারে। (যতদূর আমি বলতে পারি স্ক্রিপ্টের bashজন্য কয়েকটি প্রার্থীর অবস্থান রয়েছে .profileএবং এটি পাওয়া প্রথমটি কার্যকর করবে - . fileযেমন স্বয়ংক্রিয় ফলব্যাক নেই, তাই আপনি profileযদি এটি করতে চান তবে আপনার স্বাভাবিকটি কোথায় তা পরীক্ষা করে দেখার প্রয়োজন হবে )


দুর্দান্ত, এর জন্য ধন্যবাদ! আমি সেশ ইন করার পরে কোনও ব্যবহারকারীর অ্যাকাউন্টে মামলা করার উপায় খুঁজছিলাম এবং "-t" বিকল্পটি এটি কার্যকর করে তুলেছিল। বিকল্প ছাড়া, আপনার শেল একটি প্রম্পট নেই, কমান্ড ইতিহাস আছে না, একটি SIGINT, ইত্যাদি মৃত্যু
Ashoat

এই উত্তরটি সত্যিই সহায়ক তবে আপনি ;প্রথম ssh লগইন স্ট্রিং থেকে কয়েকটি গুলি মিস করছেন । এটি আমাকে আপনার উত্তর সম্পাদনা করতে দেবে না কারণ আমি যথেষ্ট পরিবর্তন করছি না। আমি এই কাজ পেয়েছিলাম ssh user@host.com -t 'cd /some/where; FOO=BAR; NUMBER=42; bash -l'। আমার মনে হয় আপনি এটাই চেয়েছিলেন
রব Kwasowski

2

.SBHrc সম্পাদনা করুন এবং আপনার এসএসএইচ-নির্দিষ্ট পরিবেশ সেটিংস এতে আবদ্ধ করুন:

if [ $SSH_TTY ]; then
    ...
fi

এটি আপনাকে বিশেষত এসএসএইচ সেশনের জন্য সেটিংস যুক্ত করার অনুমতি দেবে। 'কোর্স, আপনি যদি চান সমস্ত সেশন অনুসারে পৃথকীকরণের ভিত্তিতে স্বেচ্ছাসেবীয় পরিবেশের ভেরিয়েবলগুলি সেট করা হয় তবে আমি জানি না আপনি কীভাবে মেশিনটিকে টাইপ করা ছাড়া আপনার জন্য তাদের অনুমান করতে পারবেন ... যাই হোক না কেন, আপনি' সেটিংসের পছন্দটি বেস করার জন্য কিছু পরীক্ষার শর্ত প্রয়োজন।


2

থেকে sshমানুষ পৃষ্ঠা:

অতিরিক্ত হিসাবে, ssh ~ / .ssh / পরিবেশ পড়বে এবং যদি ফাইলটি উপস্থিত থাকে এবং ব্যবহারকারীদের তাদের পরিবেশ পরিবর্তন করতে দেয় তবে পরিবেশে "VARNAME = মান" বিন্যাসের লাইন যুক্ত করে। আরও তথ্যের জন্য, sshd_config (5) এ PermitUserEn वातावरणीय বিকল্পটি দেখুন।

যা বলে:

PermitUserEnਵਰমন্ডেশন d
/ .ssh / এনভায়রনমেন্ট এবং এনভায়রনমেন্ট = বিকল্পসমূহ ~ / .ssh / অনুমোদিত_ keys sshd (8) দ্বারা প্রসেস করা হয় কিনা তা সুনির্দিষ্ট করে। ডিফল্ট হ'ল "না"। পরিবেশ প্রক্রিয়াকরণ সক্ষম করা ব্যবহারকারীদের কিছু কনফিগারেশনগুলিতে যেমন LD_PRELOAD ব্যবহার করে অ্যাক্সেস বিধিনিষেধগুলিকে বাইপাস করতে সক্ষম করতে পারে।

এই সুবিধাটি মিকি প্রস্তাবিত কাঠামোটি ~/.bashrcব্যবহার করে আপনার রিমোটে শর্তসাপেক্ষে বিবৃতি কার্যকর করতে ব্যবহার করা যেতে পারে ।if


1

কেবল এইভাবে চালান: ssh -t yourdomain 'cd /yourpath; bash'

  • -t : যাতে প্রম্পট উপস্থিত হবে
  • ; bash: যাতে কমান্ড (এখানে cd) কার্যকর করা এবং ssh অধিবেশন থেকে সরে আসা সত্ত্বেও এটি নিয়ন্ত্রণটি ফিরিয়ে দিতে চাই

সার্ভারফল্টে আপনাকে স্বাগতম! কমান্ড বা স্ক্রিপ্টগুলির জন্য তাদের কী তা বোঝানোর জন্য দয়া করে সরবরাহ করুন এবং ব্যাখ্যা এবং / অথবা ডকুমেন্টেশন দিন।
কোরি নটসন

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