আমার প্রায়শই একটি নির্দিষ্ট ক্লাস্টার থেকে একটি স্বেচ্ছাসেবী কম্পিউটারে প্রবেশ করা প্রয়োজন (ক্লাস্টারের সমস্ত মেশিন অভিন্ন)। যাইহোক, ক্লাস্টারে উপলব্ধ মেশিনগুলির সেটটি প্রায়শই পরিবর্তিত হয়, সুতরাং আমার কাছে একটি স্ক্রিপ্ট রয়েছে যা উপলব্ধ ক্লাস্টার থেকে একটি স্বেচ্ছাসেবীর হোস্টনাম দেয় যা আমার প্রয়োজনীয়তার সাথে মেলে (যেমন, অনলাইন এবং সঠিক ওএস চালানো)।
আরও মনে রাখবেন যে, আমি প্রমাণীকরণের জন্য কের্বেরোস (জিএসএসএপিএআইএইচেন্টিকেশন) শংসাপত্রের ফরোয়ার্ডিং ব্যবহার করছি।
এই মুহুর্তে, আমি ব্যবহারে ssh ssh `get_host`। আমি পরিবর্তে মৃত্যুদন্ড কার্যকর করতে চাই ssh cluster। একটি পরিচিত হোস্টনাম সহ, নিম্নলিখিতগুলির সাথে এটি সহজ /ssh/config:
Host cluster
HostName static_host.cluster.domain.tld
GSSAPIAuthentication yes
GSSAPIDelegateCredentials yes
আমি HostNameআমার স্ক্রিপ্টটি ব্যবহার করে কীভাবে গতিশীলভাবে নির্বাচন করতে পারি ? (বা আমার কাঙ্ক্ষিত ফাংশন সমর্থন করার জন্য এসএসএইচের আলাদা পদ্ধতি আছে?) আমি নীচের মতো কিছু করতে চাই তবে এটি কার্যকর হয় না:
Host cluster
HostName `get_host` # This does not work
...
মাধ্যাকর্ষণটি দেখিয়েছিল যে এটি ProxyCommandকোনও স্ক্রিপ্ট হতে পারে যা হোস্টনামটি পায় এবং sshএটি ব্যবহার করে netcatবা এর সাথে সংযোগটি ফরোয়ার্ড করে socat। তবে এটি কারবেরোস শংসাপত্রগুলি ফরোয়ার্ড করছে না। এই সাহায্য পাশাপাশি প্রশংসা করা হয়।
সম্পাদনা করুন:
আমার পছন্দ মতো আপনি কার্বেরোসের সাথে এটি করতে পারবেন না (গৃহীত উত্তরের মন্তব্য দেখুন)। সুতরাং, আমি এই স্ক্রিপ্টটি ব্যবহার করছি ssh-wrapper, কমান্ড-লাইন আর্গুমেন্টে sshগতিশীল পুনরায় লেখার জন্য একটি উপাধি হিসাবে ssh। এটি দৃust় নয়, তবে এটি আমার পক্ষে কাজ করে।
#!/bin/bash
# Mapping between host aliases and dynamically-generated hostname
declare -A MAP
MAP[cluster]=`gethost`
# Find and replace on all positional args
args=$*
for key in ${!MAP[@]}; do
replace=${MAP[$key]}
args=`echo ${args} | sed "s/\(^\|[[:space:]]\)${key}\(\$\|[[:space:]]\)/${replace}/"`
done
# Execute using called-name if not this script
if [ "ssh-wrapper" != "`basename $0`" ]; then
exec $0 ${args}
# Otherwise, assume ssh and execute
else
exec ssh ${args}
fi