আমি কীভাবে $ PATH সেট করব যে `ssh ব্যবহারকারী @ হোস্ট কমান্ড` কাজ করে?


129

আমি কোনও নতুন $ PATH সেট করতে পারি না যা এটির মাধ্যমে কমান্ডগুলি কার্যকর করার সময় ব্যবহৃত হয় ssh user@host command। আমি export PATH=$PATH:$HOME/new_pathরিমোট মেশিনে ~ / .bashrc এবং ~ /। প্রোফাইল অন্তর্ভুক্ত করার চেষ্টা করেছি , কিন্তু কার্যকর করে ssh user@host "echo \$PATH"দেখায় যে পরিবর্তনটি নেওয়া হয়নি (এটি দেখায় / ইউএসআর / লোকাল / এসবিন: / ইউএসআর / লোকাল / বিন: / ইউএসআর / sbin / usr / বিন: পক্ষ থেকে / sbin: / বিন / usr / গেম)। রিমোট মেশিনটি উবুন্টু 8.04 চলছে।

আমি নিশ্চিত যে আমি এটিকে / ইত্যাদি / প্রোফাইলে হ্যাক করতে পারি তবে এটি কোনও পরিষ্কার সমাধান নয় এবং এটি কেবল তখনই কার্যকর হয় যখন কারও কাছে রুট অ্যাক্সেস থাকে।


1
আমি export PATH=$PATH:$HOME/new_pathউভয় ~ / .bash_login এবং ~ / .bash_profile যোগ করার চেষ্টা করেছি (পূর্বে চেষ্টা করা ~ / .bashrc এবং ~ /। প্রোফাইল সহ)। কোনটিই কাজ করে না। উভয় ক্ষেত্রেই আমাকে ফাইলটি তৈরি করতে হয়েছিল।
ডেনভার জিঞ্জারিচ

আমার বিশেষ ব্যবহারের ক্ষেত্রে, ssh এ প্রেরিত আদেশটি পরিবর্তন করা সহজ নয়। আমি স্টাফুফগুলি ( guru-group.fi/too/sw/stfufs ) ব্যবহার করছি , যা ssh কমান্ড নিজেই তৈরি করে। আমি বুঝতে পারি যে এর পদ্ধতিটি কোনও দুর্দান্ত সমাধান নয়, তবে স্টাফফগুলি পরিবর্তন না করে এটি ঠিক করা ভাল।
ডেনভার জিঞ্জারিচ

আপনি স্টাফুসের পথে একটি এসএসএস মোড়কে রাখতে পারেন, যদি এটি সহজ হয় তবে সংশোধিত
আরোগুলি

উত্তর:


179

মহাকর্ষ যেমন বলেছিল, ~ / .bashrc হ'ল আপনি যা চান তা নন-ইন্টারেক্টিভ নন-লগইন শেলগুলির দ্বারা উত্সাহিত।

আমি আপনার ডিফল্ট উবুন্টু b / .bashrc ফাইলটি করতে সমস্যাটি আশা করি। এটি সাধারণত এরকম কিছু দিয়ে শুরু হয়:

# If not running interactively, don't do anything
[ -z "$PS1" ] && return

আপনি এই লাইনের আগে অ-ইন্টারেক্টিভ শেলগুলির জন্য কিছু রাখতে চান ।


1
হ্যাঁ, আমি export PATH=$PATH:$HOME/new_pathউপরের লাইনটি সরিয়ে নিয়েছি এবং এটি কার্যকর হয়েছে। ধন্যবাদ!
ডেনভার জিঞ্জারিচ

3
.bashrc অবিশ্বাস্য। man bash: "বাশ কখন এটি একটি নেটওয়ার্ক সংযোগের সাথে সংযুক্ত স্ট্যান্ডার্ড ইনপুট দিয়ে চলছে তা নির্ধারণের চেষ্টা করে"। এটি আরএইচএল-তে কাজ করে তবে আর্চলিনাক্সে নয়। আমাকে ডিফল্ট PATH
বেসিন

.zshenvZsh ব্যবহারকারীদের জন্য আপনার উল্লেখটি যুক্ত করা উচিত , অন্যান্য উত্তরের মন্তব্যে এটি খুঁজে পেতে আমাকে বেশ খানিকটা সময় নিয়েছিল
মাইক

30

আপনার ~/.bash_loginনাকি আছে ~/.bash_profile?

ইন্টারঅ্যাকটিভ মোডে ব্যাশ করুন এই ফাইলগুলির জন্য পরীক্ষা করে এবং এই ক্রমে প্রথম বিদ্যমান ফাইলটি ব্যবহার করে :

  1. ~/.bash_profile
  2. ~/.bash_login
  3. ~/.profile

সুতরাং আপনার যদি একটি থাকে তবে আপনি ~/.bash_profileযা কিছু পরিবর্তন ~/.profileকরবেন তা অদৃশ্য হয়ে যাবে।

অ-ইন্টারেক্টিভ মোডে বাশ কখনও কখনও ফাইলটি পড়েন ~/.bashrc(যা প্রায়শই ইন্টারেক্টিভ স্ক্রিপ্টগুলি থেকে উত্সও পাওয়া যায়)) "কখনও কখনও" দ্বারা আমি বোঝাতে চাইছি এটি বিতরণ-নির্ভর: বেশ অদ্ভুতভাবে, এটি সক্ষম করার জন্য একটি সংকলন-সময় বিকল্প রয়েছে । দেবিয়ান ~/.bashrcপাঠ্য সক্ষম করে , যেমন: আর্চ এটি করে না।

ssh মনে হচ্ছে অ-ইন্টারেক্টিভ মোডটি ব্যবহার করছে, তাই ~/.bashrcযথেষ্ট হওয়া উচিত। যখন এই জাতীয় সমস্যা হয় তখন আমি সাধারণত কয়েকটি প্রতিধ্বনি যুক্ত করে দেখি কোন ফাইলগুলি চালিত হচ্ছে।


ইকোস যোগ করা সাহায্য করেছে ... তবে আমি এখনও 'ssh -X রিমোটম্যাচেন "এক্সটার্ম" "চালানোর জন্য একটি উপায় তাড়া করছি এবং / ইত্যাদি / প্রোফাইল এবং ~ / হোম / ইউজারনেম / .bash_profile থেকে সম্পূর্ণ সিস্টেম / ব্যবহারকারীর পথ পাচ্ছি। যদি আমি কমান্ডটিতে উভয় ফাইল উত্স করি তবে এটি কার্যকর হয় .. তবে এর কুৎসিত:)।
জেস

আপনি কীভাবে জানবেন যে "নন-ইন্টারেক্টিভ মোডে ব্যাশ ফাইলটি পড়ে ~/.bashrc"? আমি ম্যানপেজে এই বিবৃতিটি দেখতে পাচ্ছি না। ধন্যবাদ
nkight

4
আপনি যদি উত্সটিতে একটি অ-ইন্টারেক্টিভ নন-লগইন শেলটি চান ~/.bashrcতবে মনে হয় আপনার অতিরিক্ত পরিবেশ পরিবর্তনশীল সেট করতে হবে BASH_ENV; দেখতে superuser.com/a/585699/100843 । অ-ইন্টারেক্টিভ লগইন শেলগুলির জন্য, আপনাকে সম্ভবত বর্ণিত তিনটি স্টার্টআপ স্ক্রিপ্টগুলির মধ্যে একটিটি সংশোধন করতে হবে।
রাত্রে

3
জেডএসএইচ-এর জন্য অ-ইন্টারেক্টিভ ফাইলটি হ'ল:.zshenv
গণিত

2
@ ম্যাথ .zshenvসর্বদা উত্সাহিত হয়; এটি ইন্টারেক্টিভ কিনা বা তা বিবেচ্য নয়।
জোএল

19

ssh ডকুমেন্টেশন বলেছেন:

যদি কমান্ডটি নির্দিষ্ট করা থাকে তবে এটি লগইন শেলের পরিবর্তে দূরবর্তী হোস্টে সম্পাদন করা হয়।

বাশার্ক ফাইলগুলিতে যুক্ত করা কাজ করে না। তবে আপনার নিম্নলিখিত বিকল্পগুলি রয়েছে:

  1. তাহলে PermitUserEnvironmentবিকল্প sshd কমান্ড কনফিগ সেট করা হয়, আপনি আপনার পাথ সেটিং যোগ করতে পারেন~/.ssh/environment

  2. ssh remotemachine 'bash -l -c "somecommand"'


১. এটি আমার এসএসডি কনফিগারেশনে সেট করা নেই এবং man sshd_configবলে যে এটি ডিফল্টরূপে বন্ধ আছে তাই সম্ভবত এই সমাধানটি বেশিরভাগ মানুষের পক্ষে কার্যকর হবে। ২. এটি কার্যকর হবে, তবে আমি সহজেই এসএসএসে প্রেরিত আদেশটি সংশোধন করতে পারি না (আমার প্রশ্নের দ্বিতীয় মন্তব্য দেখুন)।
ডেনভার জিঞ্জারিচ

1
1. প্রত্যাশার মতো কাজ করে না, কারণ ~ / .ssh / পরিবেশে, আপনি PATH এ প্যাথ যোগ করতে পারবেন না, কারণ AT PATH সমাধান হবে না।
not2savvy


2

@ সাইনপোলিমা উত্তর ছাড়াও, এই লাইনের আগে আপনাকে নিজের রফতানি যোগ করতে হবে

# If not running interactively, don't do anything
case $- in
    *i*) ;;
      *) return;;
esac

আমি আসলে এই লাইনগুলি পুরোপুরিভাবে মন্তব্য করেছি - উবুন্টু 16.04 এলটিএস ডেস্কটপে ~ / .bashrc এ পাওয়া যায়। কিছুই কাজ করে না। হ্যাঁতে পারমিট ইউজার পরিবেশটি সেট করুন।
আর্নি এস

2

আমি নিজেই একই সমস্যা ছিল, এটি দিয়ে সমাধান:

ssh user@remotehost PATH=\$HOME/bin:\$PATH\; remote-command
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.