স্থানীয় শেল উপাধিগুলি ssh সেশনের গতিবেগে লোড করা হচ্ছে


24

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

আমার এটি গতিশীল হওয়া দরকার, প্রতিবার যখন আমি লগইন করি ইচ্ছে করে আমি নতুন নতুন নাম রাখি।

দ্রষ্টব্য: খুব সহজেই সেখানে প্রথমবারের জন্য মেশিন এবং ফাইলগুলি না জেনে লগ ইন করা হয়। কখনও কখনও এটি একক লগইন হয় that মেশিনটির জন্য কেবল একবার। এটি পরে পরিষ্কার করা দরকার, পূর্ববর্তী কনফিগারেশনটিও পুনরুদ্ধার করতে হবে।

উত্তর:


18

আপনি অস্থায়ীভাবে .bashrcঅন্য নাম দিয়ে আপনার দূরবর্তী মেশিনে অনুলিপি করতে পারেন । উদাহরণস্বরূপ, ব্যবহার .bashrc_temp:

user@local$ scp .bashrc user@remote:~/.bashrc_temp

এর পরে আপনি রিমোট মেশিনে লগইন করতে পারেন:

user@local$ ssh user@remote

এবং sourceফাইল .bashrc_temp:

user@remote$ source ~/.bashrc_temp

এখন আপনি আপনার .bashrcএবং আপনার ফাংশনগুলি ব্যবহার করতে সক্ষম হন । আপনার কাজ শেষ হয়ে গেলে আপনি দূরবর্তী মেশিনে। / .Bashrc_temp ফাইলটি সরাতে এবং লগআউট করতে পারেন।

ফাইলটির অনুলিপি এবং দূরবর্তী মেশিনে লগইন একটি ব্যাশ ফাংশন দিয়ে অর্জন করা যেতে পারে:

# copy the .bashrc to the remote machine 
# and log into the remote machine.
# parameter $1: user@remote
function s() {
  scp ~/.bashrc $1:~/.bashrc_temp
  ssh $1
}

আপডেট :

এছাড়াও আপনি কপি করতে বিবেচনা করতে পারে .bashrcথেকে /tmpআপনার রিমোটের মেশিন এবং উৎসের উপর /tmp/.bashrc_temp

আপডেট 2 :

Ssh -t ব্যবহার করে আপনি রিমোট মেশিনে লগইন করতে পারেন । এটি স্বয়ংক্রিয়ভাবে আপনার টেম্প ব্যবহার করবে .bashrc। আপডেট ফাংশন s():

function s() {
  scp ~/.bashrc $1:/tmp/.bashrc_temp
  ssh -t $1 "bash --rcfile /tmp/.bashrc_temp ; rm /tmp/.bashrc_temp"
}

এটি অবশ্যই আমি যা খুঁজছি is ধন্যবাদ! তবে কি এটি আরও কার্যকরভাবে করা সম্ভব? এক ধাপে? কারণ এখন আমাদের 3 টি পদক্ষেপ দরকার: লগ ইন, উত্স, লগআউট করার আগে মুছুন।

ঠিক আছে, আমি এখন আপনার আপডেটের পরে দেখতে পাচ্ছি। গ্রেট। আরও একটি সমাধান: "ব্যাশ --rcfile /tmp/.bashrc_temp; rm /tmp/.bashrc_temp"

আমি আপনার আপডেটটি আমার আপডেটে যুক্ত করেছি 2 ধন্যবাদ।

5
প্রায় সমস্ত উত্তর (এটি সহ) উত্তর পূর্বে ফাইল ফাইল ব্যবহার করে /tmp/। লগ ইন করে এমন ব্যবহারকারী হিসাবে যে কোনও কোড চালানোর জন্য এটি অন্য কোনও ব্যবহারকারী তুচ্ছভাবে ব্যবহার mktempকরতে পারেন the অস্থায়ী ফাইলটির একটি অনন্য নাম রয়েছে তা নিশ্চিত করার জন্য এটি ব্যবহার করা উচিত ।
টমেটজকি

9

জেনস-না একটি দুর্দান্ত উত্তর সরবরাহ করেছে। আমি কিছুটা সময় ব্যয় করেছি এবং কিশোরকে আরও ভালভাবে কাজ করার জন্য এটি পুনরায় কাজ করেছি। এইভাবে, আপনি কোনও প্যারামিটার বরাবর এসএসএইচে যেতে পারবেন, যেমন বন্দর নম্বর। পার্থক্যটি হ'ল এটি ফাইলটি sshআপলোড করতে কমান্ডটি ব্যবহার করে .bashrcপরিবর্তে scpপৃথক কমান্ড প্যারামিটারের নাম ব্যবহার করে।

আপনি দেখতে পাবেন যে এটি একটি আলাদা ফাইল আপলোড করে .bashrc_remote, যাতে আপনি প্রতিটি কিছুর পরিবর্তে দূরবর্তী সার্ভারগুলিতে কী উত্স উত্স করতে চান তা সঠিকভাবে নির্বাচন করতে পারেন

sshs() {
        ssh $@ "cat > /tmp/.bashrc_temp" < ~/.bashrc_remote
        ssh -t $@ "bash --rcfile /tmp/.bashrc_temp ; rm /tmp/.bashrc_temp"
}

এটি নিম্নলিখিত হিসাবে চালান:

sshs user@server

' sshs' নামটি "এসএসএইচ উত্স" এর জন্য। sshআপনি যখন উত্স করতে চান না তখন ব্যবহার করুন এবং sshsআপনি যখন করবেন তখন ব্যবহার করুন।

https://gist.github.com/jonahbron/5549848


এটা দরকারী। একই প্যারামিটারগুলির সেট, port / .ssh / কনফিগারেশনে এন্ট্রি যুক্ত করার দরকার নেই কেবল আলাদা পোর্ট নং নির্দিষ্ট করার জন্য!
টোমেক ওয়াইদারকা

যেহেতু এটি একই কমান্ডের নাম, সম্ভবত এটি একবারে করা সম্ভব হয়েছে, এবং কেবল একবার পাসওয়ার্ড টাইপ করুন ... দুর্ভাগ্যক্রমে আপনার আদেশগুলি একটি প্রতিবেদনে যোগদান করুন:Pseudo-terminal will not be allocated because stdin is not a terminal
টোমেক ওয়েদারকা

@ টমেক ওয়েদারকা হ্যাঁ, আমি এটিকে একটি কমান্ডে নামার জন্য প্রায় 20 মিনিটের জন্য চেষ্টা করেছি, কিন্তু কোনও উপায় পাইনি। আমি বুঝতে চেয়ে তার চেয়ে বেশি সম্ভবত বাস-বুদ্ধিমান কোনও ব্যক্তি, তবে এটি সম্ভব বলে মনে হচ্ছে না।
জোনা

2
আমি এই উত্তরটি নিয়েছি এবং কয়েক সপ্তাহের মধ্যে এটিতে পুনরাবৃত্তি করেছি। ফলাফলটি একটি সম্পূর্ণ প্রস্ফুটিত সরঞ্জাম যা সমস্যাটিকে সঙ্কুচিত করে
রাসেল

1
@ জোনাহ আপনি আমাকে ব্যাখ্যা করতে পারেন আপনি কেন $ @ এর পরিবর্তে $ used *: 1 used ব্যবহার করেছেন।
রাসেলস্টয়ার্ট

8

আমার মনে হয় sshrc হ'ল আপনি যা খুঁজছেন: https://github.com/Russell91/sshrc

sshrc ঠিক ssh এর মতোই কাজ করে তবে এটি দূরবর্তীভাবে লগ ইন করার পরে sources / .sshrc সূত্রও দেয়।

$ echo "echo welcome" > ~/.sshrc
$ sshrc me@myserver
welcome

$ echo "alias ..='cd ..'" > ~/.sshrc
$ sshrc me@myserver
$ type ..
.. is aliased to `cd ..'

আপনি এটি পরিবেশের ভেরিয়েবল সেট করতে, ফাংশন সংজ্ঞায়িত করতে এবং পোস্ট-লগইন কমান্ড চালাতে ব্যবহার করতে পারেন। এটি এত সহজ, এবং এটি সার্ভারের অন্যান্য ব্যবহারকারীর উপর প্রভাব ফেলবে না - এমনকি তারা sshrc ব্যবহার করেও। আরও উন্নত কনফিগারেশনের জন্য, পড়া চালিয়ে যান।


খুশী হলাম। আমি এক্সএক্সডি হ্যাক পছন্দ করি!
টোমেক ওয়েদারকা

@ টোমেক - হ্যাঁ এক্সএক্সডি হ্যাক সম্পূর্ণ দুর্দান্ত। আমি সত্যিই scp দিয়ে কাজটি করার চেষ্টা করেছি। তারপরে ssh এ পাইপিং সহ। এটি কেবল সার্ভারের 2 টি কল - 2 পাসওয়ার্ড এন্ট্রি - 2 রাউন্ড ট্রিপ ছাড়া করা যায় না। এটি অগ্রহণযোগ্য ছিল। তাই আমি কল্পনাতীতও করেছি।
রাসেল স্টেওয়ার্ট

আমার একটি বাগ আছে sshrc কোনও প্রতিক্রিয়া ছাড়াই স্তব্ধ। আপনি কি কিছু ডিবাগ কোড (মন্তব্যে থাকতে পারেন) এসএসসিআর-এ রাখতে পারেন যাতে আমি এটি ট্রেস করতে পারি।
টোমেক ওয়াইদারকা

মজাদার. এটি কেবল একটি বাশ স্ক্রিপ্ট তাই সাধারণত কোনও ত্রুটি বা সতর্কতা নিক্ষেপ করা হয় পর্দায় স্বয়ংক্রিয়ভাবে মুদ্রিত হবে। আপনার .sshrc.d এ কয়টি বাইট রয়েছে? এছাড়াও, কেবল টাইপ করুন vim $(which sshrc)এবং আপনি বাশ ফাইলটি দেখতে পারেন। এটি প্রতিটি স্তরের পরে ইকো কমান্ড যুক্ত করতে পারেন যেখানে এটি স্থিত রয়েছে।
রাসেলস্টেয়ার্ট

5

সীমাবদ্ধতার বিষয়ে নিশ্চিত নই, তবে আমি এ জাতীয় কিছু নিয়ে কাজ করতে সক্ষম হয়েছি:

function ssh_with_rc() {
   RC_DATA=`cat ${HOME}/.bashrc | base64 -w 0`
   ssh -t $@ "echo \"${RC_DATA}\" | base64 --decode > /tmp/${USER}_bashrc; bash --rcfile /tmp/${USER}_bashrc; rm /tmp/${USER}_bashrc"
}

alias ssh="ssh_with_rc"

এটি আমার পক্ষে সেরা উত্তর কারণ এটি একটি একক ssh কমান্ড, কোনও স্ক্যাপ উপাদান নেই। আমার পক্ষে কেবলমাত্র অবশিষ্ট উন্নতিটি হবে RC_DATAচলক এড়ানোর উপায় খুঁজে পাওয়া ।
শ্রীধর সারনোবাত

2

এটিই আমি নিয়ে এসেছি। এটি আপনাকে একটি সাধারণ আরসি ফাইল বজায় রাখার অনুমতি দেয় তবে একই সাথে এসএসএস সংযোগে সমস্ত কিছু করে (যেমন প্রথমে স্ক্রিপ করার আগে একবার লগইন করা দরকার)।

#copies some environment over to the remote machine
function ssh() {
  /usr/bin/ssh -t $* "echo `base64 -i ~/bin/remote_ssh_env.sh` | base64 --decode > /tmp/remote_ssh_env.sh; bash --rcfile /tmp/remote_ssh_env.sh"
}

আরসি ফাইলটি কতটা বড় হতে পারে তা সম্পর্কে আমি নিশ্চিত নই, যেহেতু এটি কোনও সময়ে সর্বাধিক বেরিয়ে যেতে পারে।


এই কাজটি সঠিকভাবে পাওয়ার জন্য আমাকে কমান্ডের কিছু অংশ একক উদ্ধৃতিতে আবদ্ধ করতে হয়েছিল। প্রতিধ্বনি '`বেস 64 .... sh`' - এর পরে, এটি সুন্দরভাবে কাজ করেছে। ধন্যবাদ !!
কে রবিনসন

যদি আকার কোনও সমস্যা হয়ে যায়, আপনি বেস 64 এর এনকোডিংয়ের আগে gzip এর মতো সংক্ষেপণ ইউটিলিটির মাধ্যমে ফাইলের সামগ্রীগুলি পাইপ করতে পারেন।
কে রবিনসন

2

আমি মনে করি https://github.com/fsquillace/pearl-ssh আপনার যা প্রয়োজন তা করে।

আমি sshrc জন্মের অনেক আগে এটি লিখেছিলাম এবং এসএসসিআরসি এর তুলনায় এর আরও সুবিধা রয়েছে:

  • এটি উভয় হোস্টের জন্য xxd এর উপর নির্ভরতা প্রয়োজন হয় না (যা দূরবর্তী হোস্টের জন্য অনুপলব্ধ হতে পারে)
  • পার্ল-এসএসএস আরও কার্যকর এনকোডিং অ্যালগরিদম ব্যবহার করে
  • এটি কোডের মাত্র 20 ডলার লাইন (বুঝতে পারা সত্যিই সহজ!)

এই ক্ষেত্রে:

$> echo "alias q=exit" > ~/.config/pearl/sshrc
$> ssh_pearl myuser@myserver.com
myserver.com $> q
exit

1

এটি একটি একক এসএসএইচ অধিবেশন দিয়ে কাজ করার জন্য একটি বিকল্প হ'ল আপনার ব্যাশ ফাইলটি অনুলিপি না করে সংরক্ষণ করার জন্য একটি ভেরিয়েবল ব্যবহার করা।

$ mybash=`cat mybash`
$ ssh -t 127.0.0.1 "echo $mybash > /tmp/mybash; bash --rcfile /tmp/mybash ; rm /tmp/mybash"

আমার জন্য কাজ করে বলে মনে হয়।


1

আমি আপনার মতো সমস্যার সমাধান করতে চেয়েছিলাম এবং আমি বুঝতে পেরেছিলাম যে আমি যা খুঁজছিলাম তা এসএসএফএস ছিল। আপনি এটি ব্যবহার করতে পারেন?

আমার সমস্যাটি হ'ল শ্যাশ করার সময় আমি দূরবর্তী কাজ করার সময় আমার রঙ, উপকরণ, ফাংশন এবং স্ক্রিপ্টগুলি রাখতে চাইতাম।

http://fuse.sourceforge.net/sshfs.html


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