~/.profileশুধুমাত্র লগইন শেল দ্বারা কার্যকর করা হয়। যে প্রোগ্রামটি শেলটিকে কল করে তা শেলটি লগইন শেল হবে কিনা তা সিদ্ধান্ত নেয় (শেল ডাকে -প্রার্থনায় জিরোথ আর্গুমেন্টের প্রথম চরিত্র হিসাবে)। আপনি যখন নির্দিষ্ট কমান্ড প্রয়োগ করতে লগ ইন করেন এটি সাধারণত কার্যকর হয় না।
বিশেষত ওপেনএসএইচ কেবলমাত্র যদি আপনি কোনও আদেশ সুনির্দিষ্ট না করেন তবে লগইন শেলটি আহ্বান করে। সুতরাং আপনি যদি একটি আদেশ নির্দিষ্ট করেন, ~/.profileপড়বেন না।
ওপেনএসএইচ সার্ভারের পার্শ্ববর্তী পরিবেশের পরিবর্তনশীলগুলি সেট করার অনুমতি দেয়। নির্দেশাবলী সহ এটি অবশ্যই সার্ভার কনফিগারেশনে সক্ষম করতে হবে PermitUserEnvironment। ভেরিয়েবলগুলি ফাইলটিতে সেট করা যায় ~/.ssh/environment। ধরে নেওয়া যাক আপনি সার্বজনীন কী প্রমাণীকরণ ব্যবহার করেছেন, আপনি প্রতি-কী ভেরিয়েবলগুলি এতে সেট করতে পারেন ~/.ssh/authorized_keys: environment="FOO=bar"প্রাসঙ্গিক লাইনের শুরুতে যুক্ত করুন ।
এস এস এনভায়রনমেন্ট ভেরিয়েবল প্রেরণকে সমর্থন করে। ওপেনএসএইচ-এ, SendEnvনির্দেশিকাটি ইন ব্যবহার করুন ~/.ssh/config। তবে নির্দিষ্ট পরিবেশের পরিবর্তনশীল অবশ্যই AcceptEnvসার্ভার কনফিগারেশনে একটি নির্দেশের সাথে সক্ষম করতে হবে , সুতরাং এটি আপনার পক্ষে কার্যকর নাও হতে পারে।
আমি মনে করি যে একটি জিনিস সর্বদা কাজ করে (অদ্ভুতভাবে যথেষ্ট) যতক্ষণ আপনি পাবলিক কী প্রমাণীকরণ ব্যবহার করছেন ফাইলের বিকল্পটি (আব) ব্যবহার করাcommand=authorized_keys । একটি commandবিকল্প সহ একটি কী কেবল নির্দিষ্ট কমান্ড চালানোর জন্যই ভাল; কিন্তু authorized_keysফাইলের কমান্ডটি পরিবেশিত পরিবর্তনশীল SSH_ORIGINAL_COMMANDব্যবহারকারীর দ্বারা নির্ধারিত কমান্ডটিতে চালিত হয় । এই পরিবর্তনশীলটি খালি যদি ব্যবহারকারী কোনও কমান্ড নির্দিষ্ট না করে এবং তাই একটি ইন্টারেক্টিভ শেল আশা করে। সুতরাং আপনি এ জাতীয় কিছু ব্যবহার করতে পারেন ~/.ssh/authorized_keys(অবশ্যই, আপনি যদি এই কীটি প্রমাণীকরণের জন্য ব্যবহার না করেন তবে এটি প্রযোজ্য নয়):
command=". ~/.profile; if [ -n \"$SSH_ORIGINAL_COMMAND\" ]; then eval \"$SSH_ORIGINAL_COMMAND\"; else exec \"$SHELL\"; fi" ssh-rsa …
আর একটি সম্ভাবনা হ'ল সার্ভারে একটি র্যাপার স্ক্রিপ্ট লিখুন। নিম্নলিখিতগুলির মতো কিছু ~/bin/ssh-wrapper:
#!/bin/sh
. ~/.profile
exec "${0##*/}" "$@"
তারপর এই স্ক্রিপ্ট নামে সিম্বলিক লিংক করা rsync, unisonইত্যাদি পাস --rsync-path='bin/rsync'উপর rsyncতাই অন্যান্য প্রোগ্রামের জন্য কমান্ড লাইন, এবং। বিকল্পভাবে, কিছু কমান্ড আপনাকে দূরবর্তী অবস্থানের জন্য পুরো শেল স্নিপেট নির্দিষ্ট করার অনুমতি দেয়, যা আপনাকে কমান্ডটি স্ব-অন্তর্ভুক্ত করতে দেয়: উদাহরণস্বরূপ, আরএসসিএনসি সহ, আপনি ব্যবহার করতে পারেন --rsync-path='. ~/.profile; rsync'।
আর একটি অ্যাভিনিউ রয়েছে যা আপনার লগইন শেল বাশ বা zsh হওয়ার উপর নির্ভর করে। বাশ সর্বদা পড়তে থাকে ~/.bashrcযখন এটি আরএসডি বা এসএসডি দ্বারা চালিত হয়, এটি ইন্টারেক্টিভ না হলেও (তবে এটি হিসাবে পরিচিত না হলে sh)। Zsh সর্বদা পড়া ~/.zshenv।
## ~/.bashrc
if [[ $- != *i* ]]; then
# Either .bashrc was sourced explicitly, or this is an rsh/ssh session.
. ~/.profile
fi
## ~/.zshenv
if [[ $(ps -p $PPID -o comm=) = [rs]shd && $- != *l* ]]; then
# Not a login shell, but this is an rsh/ssh session
. ~/.profile
fi