এসএসএইচ - প্রতিটি সংযোগ দ্বারা এনভিরু ভায়ারবিলস সেট করুন - গডাডি শেয়ার্ড হোস্ট


16

আমার সমস্যাটি হ'ল, আমাকে একটি সার্ভারে env ভেরিয়েবলগুলি (GIT_EXEC_PATH এর মতো) সেট করতে হবে। আমার প্রতিটি সংযোগের মাধ্যমে সেই ভেরিয়েবলগুলি দরকার (সুতরাং বাশ এবং দূরবর্তী কমান্ড দ্বারা)। আমি .bash_profile দিয়ে ব্যাশ করে সেগুলি পরিবর্তন করতে সক্ষম হয়েছি, তবে দূরবর্তী কমান্ডগুলির সাথে আমার সমস্যা আছে। আমি দেখতে পেয়েছি যে আসল আরএসএ কী এর আগে ~ / .ssh / अधिकृत_keys এ কমান্ড লেখা সম্ভব, তবে আমি সেখানে সর্বদা লিখতে চাই না, আমার একটি স্থায়ী সমাধান দরকার ... আমি দেখতে পেয়েছি যে ~ / .ssh / আরসি ফাইলটি প্রতিটি এসএসএল লগইন দ্বারা সম্পাদিত হয়, তাই আমি আমার enর্ষা পরিবর্তনশীল ঘোষণা এখানে রেখেছি, তবে এটি কার্যকর হয়নি। ভেরিয়েবলগুলি আরসি ফাইলে সেট করা থাকে তবে এর পরে সেগুলি অদৃশ্য হয়ে যায়। : এস হতে পারে আরসি ফাইলটি একটি সাব-শেলের মধ্যে চলে: এস কোডগুলি নকল ছাড়াই ব্যাশ এবং দূরবর্তী কমান্ডগুলিতে সেই পরিবর্তনগুলি সংজ্ঞায়িত করার কোনও উপায় আছে?

সম্পাদনা:

আমি প্রশ্নটি সম্পাদনা করেছি, কারণ সার্ভারটি একটি গডাডি শেয়ার্ড হোস্ট, তাই এটির একটি অনন্য কনফিগারেশন রয়েছে। / Etc / ssh / sshd_config এবং / etc / ssh / ssh_config ফাইলগুলি খালি রয়েছে। এই ফাইলগুলিতে মন্তব্য রয়েছে, আপনি যদি আগ্রহী হন তবে আমি এটি এখানে অনুলিপি করতে পারি।

  1. ~ / .Bash_ প্রোফাইলে উত্সাহিত করা হয় (কেবল বাশ সংযোগ দ্বারা),
  2. ~ / .bashrc কখনই উত্স হয় না,
  3. ~ /। প্রোফাইলে কখনই উত্স হয় না,
  4. ~ / .ssh / পরিবেশ কখনই উত্সাহিত হয় না,
  5. ~ / .ssh / rc কে স্যুরস করা হয় (ব্যাশ এবং রিমোট উভয় দ্বারা) তবে আমার মনে হয় এটিকে সাবচেলে বলা হয়েছে কারণ ভেরিয়েবলগুলি অদৃশ্য হয়ে যায়।
  6. Time / .ssh / अधिकृत_keys প্রতিবারই উত্সাহিত হয়, তবে আমাকে প্রতিটি আরএসএ কী এর আগে কমান্ড লিখতে হবে (যাতে আমি এটির সাথে কনফিগার করতে চাই না)।

সারসংক্ষেপ:

আমি ব্যাশটি ভালভাবে (.bash_profile সহ) কনফিগার করতে পারি, তবে আমি দূরবর্তী কলগুলি কনফিগার করতে পারি না। এটাই সমস্যা। আমি এমন একটি ফাইল সন্ধান করছি যা বাশ এবং দূরবর্তী কমান্ড উভয়ই সঞ্চিত।

উদাহরণ স্বরূপ:

গিট-আপলোড-প্যাক কমান্ডটি এক্সি ফাইলটি সন্ধান করে, কারণ GIT_EXEC_PATH এনভ ভেরিয়েবল সেট করা আছে তবে রিমোট সহ: "গিট ক্লোন ইউজার @ডোমেন ডট কম: মাইরেপো লোকাল / মাইরেপো" সার্ভারটি সেই কমান্ডটি খুঁজে পাচ্ছে না, কারণ জিআইআইএফএসইসিপিএপিএটিএইচ সেট করা নেই।

Edit2:

মতে এই , এবং আমার printenv লগ: ~ / .ssh / RC, স্বাভাবিক শেল চলছে, subshell নেই তাই এটি একটি হেঁয়ালি কেন env ভেরিয়েবল স্টিকিং না ...

আমি একটি নির্বাহযোগ্য তৈরি করেছি: ~ / লোজেনভ :

echo "" >> mylog.txt
date >> mylog.txt
printenv >> mylog.txt
echo "" >> mylog.txt

এবং এটি ~ / .ssh / rc তে রাখুন :

export AAA=teszt
source ~/logenv

বাশ লগইন এবং "উত্স লোজনভ" দ্বারা ফলাফলটি ছিল:

Tue May 15 04:21:37 MST 2012
TERM=cygwin
SHELL=/bin/bash
SSH_CLIENT=censored
SSH_TTY=/dev/pts/2
USER=myuser
AAA=teszt
MAIL=/var/mail/myuser
PATH=/usr/local/bin:/bin:/usr/bin
PWD=/home/content/65/7962465
SHLVL=3
HOME=/var/chroot/home/content/65/7962465
LOGNAME=myuser
SSH_CONNECTION=censored
_=/usr/bin/printenv

Tue May 15 04:21:41 MST 2012
HOSTNAME=censored
TERM=cygwin
SHELL=/bin/bash
HISTSIZE=1000
SSH_CLIENT=censored

দূরবর্তী দ্বারা "ssh myuser@domain.com 'exec ~ / logenv'" ফলাফলটি ছিল:

Tue May 15 04:25:52 MST 2012
SHELL=/bin/bash
SSH_CLIENT=censored
USER=myuser
AAA=teszt
MAIL=/var/mail/myuser
PATH=/usr/local/bin:/bin:/usr/bin
PWD=/home/content/65/7962465
SHLVL=3
HOME=/var/chroot/home/content/65/7962465
LOGNAME=myuser
SSH_CONNECTION=censored
_=/usr/bin/printenv

Tue May 15 04:25:52 MST 2012
SHELL=/bin/bash
SSH_CLIENT=censored
USER=myuser
PATH=/usr/local/bin:/bin:/usr/bin
MAIL=/var/mail/myuser
PWD=/home/content/65/7962465
HOME=/var/chroot/home/content/65/7962465

সুতরাং আরসি ফাইলটি সোর্স করা হয় তবে তার পরে ভেরিয়েবলগুলি অদৃশ্য হয়ে যায় ...: এস


এই থ্রেড কিছু অপশন - stackoverflow.com/questions/216202/...
EightBitTony

"/ Etc / sshrc এর বিপরীতে, যা সর্বদা বোর্ন শেল (/ বিন / শ) দ্বারা প্রক্রিয়া করা হয়, আপনার আরসি ফাইলটি আপনার অ্যাকাউন্টের সাধারণ লগইন শেল দ্বারা প্রক্রিয়া করা হয়।" - এটি আশ্চর্যজনক কারণ এটি দেখে মনে হচ্ছে এটি সাধারণ শেল দ্বারা উত্সাহিত হবে না: এস
inf3rno

উত্তর:


12

আপনার আছে ধরে নেওয়া যাক UsePAM yes/etc/ssh/sshd_config, আর অভিমানী যদি আপনি চান এই এনভায়রনমেন্ট ভেরিয়েবল প্রত্যেক ব্যবহারকারীর জন্য সেট, আপনার জন্য পাম সেট এনভায়রনমেন্ট ভেরিয়েবল থাকতে পারে। আপনার যদি পরিবেশের ভেরিয়েবলগুলি সংজ্ঞায়িত করা থাকে তবে /etc/gitenvআপনি এই লাইনটি যুক্ত করতে পারেন/etc/pam.d/sshd

auth required pam_env.so envfile=/etc/gitenv

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


আমার কাছে একটি গডাড্ডি শেয়ার্ড হোস্ট অ্যাকাউন্ট রয়েছে, তাই আমি কেবল ~ ডিরেক্টরিটি পরিবর্তন করতে পারি। (
এটিতে সেন্টোস

@ inf3rno এটি ভাল উত্তরকে উঁচু করে তোলা ক্ষতি করে না :) যাইহোক আপনার সমস্যার সমাধান করবে এমন সমাধানটি অন্য কোনও উপায়ে চিহ্নিত করা যেতে পারে।
হিউজেন্স

ঠিক আছে. আমি করব, তবে আমি একমাত্র ভোট গ্রহণ করতে পারি না ... :-)
inf3rno

উবুন্টুতে, এটি ডিফল্টরূপে /etc/environmentউত্সাহিত হয়েছে বলে মনে হয়pam_env.so
rcoup

4

আমি আমার এসএসএইচ সংযোগগুলির জন্য কিছু পরিবেশ পরিবর্তনশীল সেট করছি ~/.ssh/environment। ফাইলটিতে ফর্মের পরিবর্তনশীল থাকতে পারে VAR=value, এগুলি স্পষ্টভাবে রফতানি করার দরকার নেই।

যাইহোক, এই ব্যবহারকারী কনফিগারেশন ফাইলটি এসএমএইচ সার্ভার প্রক্রিয়া দ্বারা ডিফল্টরূপে উপেক্ষা করা হবে যদি না পারমিট ইউজার-পরিবেশের বিকল্পটি হ্যাঁ সেট করা না থাকে। সুতরাং আপনাকে এই পরামিতিটি যুক্ত করতে বা আপডেট করতে এসএসএইচ সার্ভারে / etc / sshd_config সম্পাদনা করার বিষয়টি নিশ্চিত করতে হবে:

PermitUserEnvironment yes

আপনাকে এসএসএইচ সার্ভার কনফিগারেশনটি পুনরায় লোড করতে হবে। আরএইচইএল বা সুস লিনাক্সে আপনি করেন (মূল হিসাবে)

/sbin/service sshd reload

(Sshd sshd এর কাজ না করলে সম্ভবত প্রতিস্থাপন করুন)

উবুন্টুতে (আপস্টার্ট ব্যবহার করে) আপনি করেন

sudo reload ssh

অন্য যে কোনও লিনাক্সে, আপনি চেষ্টা করতে পারেন (রুট হিসাবে)

/etc/init.d/sshd reload

(Sshd কে ssh বা openssh বা SSH সার্ভার আরআর স্ক্রিপ্টের সাথে সঙ্গতিপূর্ণ যা কিছু পরিবর্তন করুন)


ধন্যবাদ, তবে আমি / ইত্যাদি দির লিখতে পারি না, ~ / .ssh / পরিবেশ উত্সাহিত হয় না।
inf3rno

2

আমার আর কোনও গড্ডাডি শেয়ার্ড হোস্ট নেই, তাই প্রস্তাবিত সমাধানগুলি বৈধ কিনা তা আমি পরীক্ষা করতে পারছি না। এটি গ্রহণযোগ্য উত্তর থেকে যাবে, যেহেতু আমি যখন প্রশ্ন জিজ্ঞাসা করেছি তখন এটি আমার দ্বারা কাজ করেছিল worked অন্যান্য উত্তরগুলি পাশাপাশি কাজ করতে পারে। আমি সম্প্রদায়টিকে সিদ্ধান্ত নিতে দিয়েছি।

ঠিক আছে. সমাধানটি হ'ল কোনও গডাডি শেয়ার্ড হোস্টের কোনও সমাধান নেই। আমি সবকিছু চেষ্টা করেছিলাম, কিন্তু কিছুই কার্যকর হয় না, তাই আমি স্থির করেছিলাম যে আমি ~ / .ssh / অনুমোদিত_মানের সাথে থাকি:

command="~/connect.sh" ssh-rsa AAAAB3NzaC...

~ / সংযুক্ত.শ্রে:

#!/bin/bash
if [ -f "${HOME}/.env_profile" ]; then
        source ~/.env_profile
fi;

if [ "x${SSH_ORIGINAL_COMMAND}x" == "xx" ]; then
        $SHELL --login
else
        eval "${SSH_ORIGINAL_COMMAND}"
fi;

এবং ~ / .env_ প্রোফাইলে:

export PATH=$PATH:$HOME/bin:$HOME/git/libexec/git-core
export LD_LIBRARY_PATH=$HOME/git/lib
export GIT_EXEC_PATH=~/git/libexec/git-core
export GIT_TEMPLATE_DIR=~/git/share/git-core/templates

সুতরাং আমাকে কমান্ড = "..." অনুলিপি করতে হবে অনুমোদিত_কিগুলিতে প্রতিটি আরএসএ কীতে। এটি কোড সদৃশ, তবে আমি মনে করি না যে কোনও গডাড্ডি ভাগ করে নেওয়া হোস্টের আর কোনও সমাধান আছে।


1

যদি আপনি bashনিজের শেল হিসাবে ব্যবহার করে থাকেন তবে পরিবেশ সেটিংসে এতে যুক্ত করার চেষ্টা করুন .bashrc

এটি লগইন করার পরে চালিত হয় তা আগে পরীক্ষা করুন, স্ট্যান্ডার্ড ফাইলগুলির মধ্যে প্রায়শই এর মতো কিছু নাও থাকতে পারে:

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

তাদের শুরুতে। অ-ইন্টারেক্টিভ লগইনগুলির জন্য আপনি যে কোনও পরিবর্তন করতে চান তাও এই জাতীয় বিবৃতিতে উপরে।

.profileকনফিগারেশন স্থাপনের জন্য এটি একটি সাধারণ জায়গা এবং বেশিরভাগ শাঁস দ্বারা এটি সম্মানিত হয় (একটি ডিফল্ট ডেবিয়ান সেটআপে এটি প্রথম স্থানে ~/.profileকল ~/.bashrcকরে)। .profileঅন্যান্য শাঁস দ্বারা এটি কখনই ব্যাখ্যা করা হয় সে ক্ষেত্রে আপনাকে আরও সতর্কতার সাথে সম্পাদনা করার প্রয়োজন হতে পারে - যেমন bashনির্দিষ্ট এক্সটেনশনগুলি ব্যবহার এড়াতে চেষ্টা করুন ।

সম্পাদন করা

আপনার .bash_profileপরিবর্তে যদি এমন কোনও সম্পাদনা থাকে .profile: বাশ আরও সাধারণ ফাইলের পক্ষে এটি ব্যবহার করবে এবং আপনি সেখানে নিরাপদে বাশ নির্দিষ্ট জিনিস ব্যবহার করতে পারেন।


Pls "সম্পাদনা" বিভাগটি পড়ুন। (। প্রোফাইল কাজ করছে না)
inf3rno

1

আপনি sshd_config ফাইলে এই লাইনটি যুক্ত করে অনুমোদিত_কিগুলিতে কমান্ড অংশটি যুক্ত না করে সমস্ত ব্যবহারকারীর / কীর জন্য কমান্ডটি ব্যবহার করতে পারেন:

ForceCommand ~/connect.sh

এই ক্ষেত্রে আমি আপনাকে স্ক্রিপ্টের জন্য একটি নিখুঁত পথ ব্যবহার করার পরামর্শ দিচ্ছি


0

আমি আপনাকে অন্য পদ্ধতির প্রস্তাব করছি

আপনি আপনার পরিবেশের পরিবর্তনশীল ঘোষণার সাথে একটি ফাইল সেট আপ করেছেন এবং তারপরে আপনি যখনই কোনও রিমোট কমান্ড কল করবেন তখনই এটি উত্স তৈরি করবেন।

উদাহরণ: আপনি প্রয়োজনীয় ভেরিয়েবলগুলি ~ / .my_var.rc এ রেখেছেন এবং তারপরে প্রতিটি রিমোট কমান্ডের জন্য ssh user@remote bash -c "source ~/.my_var.rc; <your command>"

যদি এটি আপনার পক্ষে উপযুক্ত হয় তবে আপনি এই ধারণাটি পরিমার্জন করতে এবং সুবিধার জন্য এটি স্ক্রিপ্ট করতে পারেন। যদি আপনার কেবল গিট কমান্ডগুলির জন্য এটির প্রয়োজন হয়, তবে আমি একটি git.sh স্ক্রিপ্ট তৈরি করব যা এটি করবে:

#!/bin/bash

source ~/.my_var.rc

git $@

এই স্ক্রিপ্টটি আপনার হোম ডিরেক্টরিতে থাকবে তা ধরে নিলে আপনি এটিকে কল করবেন: ssh user@remote git.sh pull origin master

দ্রষ্টব্য: এটি একটি সহজ সূচনা পয়েন্ট। উদাহরণস্বরূপ, এটি স্পেস সহ পরামিতিগুলিকে সমর্থন করে না।


আমি সেই অফসিটি করতে পারি, তবে সেই
কনফিগারটি

আপনি কি একই ব্যবহার করে ssh রিমোটের সাথে সংযুক্ত হন? যদি হ্যাঁ হয়, তবে ফাইল ~ / .my_var.rc ফাইলটি ব্যবহারকারী নির্দিষ্ট এবং git.sh সবার জন্য সাধারণ হবে। যদি না হয় তবে আপনি git.sh এ একটি অতিরিক্ত প্যারামিটার যুক্ত করতে পারেন যা কোন .rc ফাইলটিকে উত্স থেকে আলাদা করতে সহায়তা করতে পারে (বা এটি স্থির আইপি ব্যবহার করে আপনি SSH_CLIENT env তথ্য ব্যবহার করতে পারবেন আপনার ব্যবহারকারীদের আলাদা করতে)। কমান্ডটি গিট গুইয়ের সাথে কাজ করা উচিত, কল করুনssh -Y user@remote git.sh gui
হিউজেনস

প্রতিটি ব্যবহারকারীর জন্য আমার একই এনভিভ সেটিংস দরকার। আমি কমান্ডগুলিতে অতিরিক্ত অংশ যোগ করব না, এটি অযৌক্তিক ...
inf3rno

ঠিক আছে তবে সেটিংস যদি সমস্ত ব্যবহারকারীর জন্য একই থাকে তবে উত্তরটি সম্পূর্ণ হয়ে গেছে এবং আপনি আমার আগের মন্তব্যটিকে উপেক্ষা করতে পারেন। আপনার সম্ভবত .rc এবং .sh ফাইলগুলি একটি ডিরেক্টরিতে রাখা দরকার যা সমস্ত ব্যবহারকারীদের দ্বারা অ্যাক্সেসযোগ্য / অ্যাক্সেসযোগ্য।
হিউজেন্স

@ inf3rno আপনি যদি আরও উত্তর চান তবে আপনার ক্ষেত্রে প্রযোজ্য না হলেও ভাল উত্তরগুলির প্রস্তাব দেওয়া উচিত তাদের ইতিমধ্যে ধন্যবাদ জানানো উচিত কারণ মূল প্রশ্নটিতে তথ্য অনুপস্থিত ছিল। অথবা লোকেরা চেষ্টা করে বিরক্ত করবেন না।
হিউজেনস

0

এটি PATHS সম্পর্কে সাধারণ প্রশ্নের উত্তর দেয় না, তবে এটি আপনাকে দূরবর্তী সার্ভারে গিট সংগ্রহস্থল ব্যবহার করার অনুমতি দেয় যাটির পথে গিট নেই এবং যাতে আপনার রুট অ্যাক্সেস নেই। এই সমাধানটি এই পৃষ্ঠা থেকে আসে ।

git clone -u relative/path/to/bin/git-upload-pack username@host.com:relative/path/to/remote_repository.git

চাপ এবং আনতে:

git config remote.origin.receivepack relative/path/to/bin/git-receive-pack
git config remote.origin.uploadpack relative/path/to/bin/git-upload-pack

0

/ ইত্যাদি / প্রোফাইল ssh- ক্লায়েন্টের সাথে প্রতিটি সংযোগে উত্সাহিত করা হবে।


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