Ssh কমান্ডের মাধ্যমে আমি কীভাবে পরিবেশের পরিবর্তনশীলটি পাস করতে পারি? [প্রতিলিপি]


42

আমি কীভাবে কোনও ssh কমান্ডের মধ্যে একটি মান পাস করতে পারি, যেমন হোস্ট মেশিনে শুরু হওয়া পরিবেশটি আমার পছন্দসই একটি নির্দিষ্ট পরিবেশের পরিবর্তনশীল সেট দিয়ে শুরু হয়?

সম্পাদনা: লক্ষ্যটি হ'ল বর্তমান কেডি ডেস্কটপ (ডিসকপ কেভিন কেভিনআইন্টারফেস কারেন্টডেস্কটপ থেকে) তৈরি করা নতুন শেলটিতে পাস করা যাতে আমি আমার সার্ভারে আমার জেডিট উদাহরণটিতে একটি এনএফএস অবস্থানগুলি ফিরিয়ে দিতে পারি যা প্রতিটি কেডি ডেস্কটপের জন্য অনন্য। ( Emacsserver / emacsclient মত একটি প্রক্রিয়া ব্যবহার করে )

একাধিক সময়ে ssh দৃষ্টান্তগুলি ফ্লাইটে যাওয়ার কারণ হ'ল কারণ যখন আমি আমার পরিবেশটি সেট আপ করছি, তখন আমি বিভিন্ন মেশিনে বিভিন্ন ssh দৃষ্টান্তের একটি গোছা খুলছি।

উত্তর:


17

~/.ssh/environmentফাইল সেট ভেরিয়েবল আপনি দূরবর্তী আদেশ জন্য উপলব্ধ চান ব্যবহার করা যাবে। আপনাকে PermitUserEnvironmentএসএসডি কনফিগারেশন সক্ষম করতে হবে ।

এই পদ্ধতিতে চলিত চলকগুলি শিশু প্রক্রিয়াগুলিতে রফতানি করা হয়, সুতরাং আপনি এটি করতে পারেন:

echo "Foo=Bar" > sshenv
echo "Joe=37" >> sshenv
scp sshenv user@server:~/.ssh/environment
ssh user@server myscript

এবং রহস্যটি জানবে যে ফু হল বার এবং জো 37 বছর is


3
ভেরিয়েবলটির সম্ভাব্য প্রতিটি এসএস কল
রস রজার্স

1
আপনি কী করতে চাইছেন এবং কেন করছেন তার বর্ণনা দিয়ে আরও ভাল হতে পারে। অন্যান্য সমাধান হতে পারে। এনভায়রনমেন্ট ফাইলটি প্রতিটি এসএস কলে গতিশীলভাবে তৈরি করতে হবে, যা অসম্ভব নয়।
ইম্মেফ

কি পরিবর্তন হতে চলেছে? এই ভেরিয়েবলের মান বা এমনকি তাদের নাম?
innaM

অভিশাপ। আমি এই সমাধানটি চেষ্টা করেছিলাম, তবে আমার কাছে sshd কনফিগারেশন ফাইল অ্যাক্সেস নেই এবং v / .ssh / পরিবেশ বা ars / .ssh2 / এনভায়রনমেন্টে ওয়ার্স লাগানো কার্যকর নয়। আমি অনুমান করি যে আমি একটি কলডেজ ব্যবহার করতে যাচ্ছি যেখানে আমি এই পরিবর্তনকটি একটি এনএফএস ডিস্কে রেখেছি এবং তারপরে এটি আমার ~ / .tcsh সেটআপ ফাইলটি দিয়ে স্নারফ করব।
রস রজার্স

2
এই উত্তরটি আসলে প্রশ্নের উত্তর বলে মনে হচ্ছে না।
অনুপ্রেরণা

55

SendEnvবিকল্পটি আপনার লোক।

~ / .ssh / config: (স্থানীয়ভাবে)

SendEnv MYVAR

/ etc / ssh / sshd_config: (দূরবর্তী প্রান্তে)

AcceptEnv MYVAR

এখন, $MYVARস্থানীয়ভাবে যা মান হয় তা দূরবর্তী সেশনেও উপলব্ধ হয়ে যায়।
আপনি যদি একাধিকবার লগইন করেন, তবে প্রতিটি সেশনের নিজস্ব কপি থাকবে $MYVAR, সম্ভবত বিভিন্ন মান রয়েছে।

~/.ssh/environmentঅন্য উদ্দেশ্যে বোঝানো হয়। শেলবিহীন কমান্ডগুলি দূরবর্তীভাবে $ENVকার্যকর করার সময় এটি ফাইলের মতো কাজ করে ।


6
কমান্ড লাইনের মাধ্যমেও (আরও কার্যকরভাবে) পাস করা যায় ssh myserver -o SendEnv="MYVAR", যাতে আপনি এটি স্ক্রিপ্টগুলিতে গতিশীল করতে পারেন।
মাইক ক্যাম্পবেল

30

নিম্নলিখিতগুলির মতো একটি কমান্ডের সাহায্যে আপনি মানগুলি পাস করতে পারেন:

ssh username@machine VAR=value cmd cmdargs

আপনি এটি দিয়ে পরীক্ষা করতে পারেন:

ssh machine VAR=hello env

Tcsh এ নিম্নলিখিতটি মনে হচ্ছে কাজ করছে:

ssh machine "setenv VAR <value>; printenv"

দেখে মনে হচ্ছে এটি ব্যাশ পরিবেশের জন্য ভাল কাজ করে। খুব খারাপ আমি কর্পোরেট tcsh পরিবেশে আছি।
রস রজার্স

2
আমি কীভাবে সেশনটি ইন্টারেক্টিভভাবে ব্যবহার করতে পারি?
ভাগ্যডায়োন্ড

1
মনে রাখবেন যে প্রথম উদাহরণটি কেবলমাত্র প্রথম কমান্ডের জন্য কাজ করে যদি আপনি একসাথে কমান্ড শৃঙ্খলাবদ্ধ হন (সহ &&)। export VAR=value;তৃতীয় ফর্মের সেটেভের পরিবর্তে ব্যাশ ব্যবহার করা এই ক্ষেত্রে কাজ করে।
contrebis

2
এটাই আমি শেষ করেছিলাম! আপনি যেখানেই যান না কেন, আপনার পরিবেশকে সাথে রাখুন। তোমার এটা যে মত করতে পারেন: ssh user@host "$(<env_to_source.sh) command ..." । উত্স থেকে উত্সাহে, আমার export var=value ; পৃথক লাইনে আছে (সেমিকোলনটি মনে রাখবেন)।
টমাসজ গেন্ডার

@ টমাসজান্ডার: বছর পরে, এখনও নিখুঁত - আমাকে এমনকি এখানে প্রম্পম্পকোম্যান্ডের মতো জটিল জিনিসগুলি পাস করার অনুমতি দেয় ডব্লিউ / ওকে পালানোর বিষয়ে চিন্তা করা দরকার :-) 1000 ধন্যবাদ।
রেড পিল

29

একটি ভয়ঙ্কর, ভয়ঙ্কর হ্যাকও রয়েছে।

যদি আপনার স্ক্রিপ্টটি দূরবর্তী প্রান্তে ভেরিয়েবল গ্রাস করে (যেমন আপনি এটির নাম রাখতে পারেন) তবে আপনি স্থানীয় ভেরিয়েবলগুলিকে অপব্যবহার করতে পারেন। LC_ * ফর্মের যে কোনও ভেরিয়েবলটি ভারব্যাটিমে পাস হবে, যা কোনও কনফিগারেশনের প্রয়োজন নেই।

উদাহরণস্বরূপ, আমাদের এক ক্লায়েন্টে আমাদের কয়েকটি সিরিজ বেস্ট সার্ভার রয়েছে। আমি এটির সাথে সংযোগ স্থাপন করা ঘৃণা করি, প্রতিবারই কেবল অন্য সার্ভারে এবং অন্য একটি সার্ভারের সাথে সংযোগ স্থাপন করার জন্য। আমার কাছে একটি স্ক্রিপ্ট রয়েছে যা এসএসএইচের মতো আচরণ করে, এটি চালাক except

মূলত, যদি LC_BOUNCE_HOSTS সেট করা থাকে তবে এটি স্পেসে বিভক্ত হয় এবং প্রথম হোস্টের খোসা ছাড়ায়। তারপরে এটি বাউন্স করে একই স্ক্রিপ্টটি চালায়। গন্তব্য নোডে, এই তালিকাটি শেষ পর্যন্ত খালি হয়, সুতরাং এটি কমান্ডটি চালায়। আমার একটি ডিবাগ মোডও রয়েছে (যা নেটওয়ার্ক ঝামেলার সময় দুর্দান্ত) যা এলসি_বিওইনসিসিডিডিইউজি সেট করে। যেহেতু ssh আমার কাছে যাদুবিদ্যার সাথে এই সমস্তগুলি পাস করে, তাই হোস্ট তালিকার শেষটি (যা আমি একটি - বিকল্প দিয়ে করি) স্বীকৃতি ছাড়া আমার আর কিছু করার দরকার নেই।

আমি যখনই এটি ব্যবহার করি ততবারই আমি ময়লা বোধ করি, তবে এটি চেষ্টা করেই সর্বত্র এটি কাজ করে।


2
আপনি ওপেনএসএসএইচ-এর অন্তর্নির্মিত ProxyCommandবিকল্পের পরিবর্তে কেন এমন কিছু ব্যবহার করবেন ? আপনার সম্পাদনা করুন ~/.ssh/configএবং এর মতো একটি ব্লক যুক্ত করুন এবং Host *.example.com: ProxyCommand -ssh -W %h:%p bastionhostএটি আপনার জন্য আপনার সংযোগগুলি সুড়ঙ্গ করুন।
কির্ক স্ট্রুজার

1
টানেলের জন্য, এটি এতটা খারাপ নয়। উদাহরণস্বরূপ, দুটি কারণে: এক, পারমিট ইউজার এনভায়রনমেন্টের এগুলি সরাসরি পাস করার জন্য সার্ভারে কনফিগার করার জন্য প্রশাসকের অ্যাক্সেস প্রয়োজন। কমান্ড লাইনের মাধ্যমে তাদের পাস করা সঠিকভাবে পালানোর পক্ষে পাওয়া খুব কঠিন। দু'টি, একাধিক ঘাঁটি অবশ্যই এটিকে আরও জটিল করে তোলা উচিত - বিশেষত যখন নির্দিষ্ট হোস্টের হোস্টে কোন পাথটি নেওয়া উচিত তা সোর্স হোস্টের কাছ থেকে পরিষ্কার নয়। এটি বলা সহজ: ssh-config ফাইলগুলির একটি সিরিজে হোস্টের ক্রমবর্ধমান জনসংখ্যার জন্য রুটগুলি বজায় রাখার চেয়ে "বাউন্স-এসএস বেস্ট 1 বেস্ট 2 নোডেক্স - আরএম-আরএফ /"।
জেইসন

ভালো বল ধরা !! এত সুন্দর আর কিছুটা নোংরা !!
zw963

2
এটা ভয়াবহ। সাবাস। 👏
পাই ডিলপোর্ট

1
এটি মারাত্মকভাবে দুর্দান্ত, ধন্যবাদ! আমি এটি আরও এক ভয়ঙ্কর সুন্দর হ্যাক জন্য ব্যবহার করেছি ! :)
লুব্রিক

1
bla="MyEnvSelection=dcop"
ssh user@host "export $bla && ./runProg"

বাশ অন আমি এর সাথে পরীক্ষা করেছি:

$ echo '#!/bin/sh' > readEnv.sh
$ echo 'echo "MyEnv: "$MyEnvFromSSH' >> readEnv.sh

$ scp readEnv.sh user@host:~/
$ bla="MyEnvFromSSH=qwert"
$ ssh user@host "export $bla && ./readEnv.sh"
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.