কীভাবে এসএসএইচ কনফিগারেশন ফাইলে এক্সিকিউটেবল স্ক্রিপ্ট থেকে হোস্টনাম পাবেন?


10

আমার প্রায়শই একটি নির্দিষ্ট ক্লাস্টার থেকে একটি স্বেচ্ছাসেবী কম্পিউটারে প্রবেশ করা প্রয়োজন (ক্লাস্টারের সমস্ত মেশিন অভিন্ন)। যাইহোক, ক্লাস্টারে উপলব্ধ মেশিনগুলির সেটটি প্রায়শই পরিবর্তিত হয়, সুতরাং আমার কাছে একটি স্ক্রিপ্ট রয়েছে যা উপলব্ধ ক্লাস্টার থেকে একটি স্বেচ্ছাসেবীর হোস্টনাম দেয় যা আমার প্রয়োজনীয়তার সাথে মেলে (যেমন, অনলাইন এবং সঠিক ওএস চালানো)।

আরও মনে রাখবেন যে, আমি প্রমাণীকরণের জন্য কের্বেরোস (জিএসএসএপিএআইএইচেন্টিকেশন) শংসাপত্রের ফরোয়ার্ডিং ব্যবহার করছি।

এই মুহুর্তে, আমি ব্যবহারে 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

সার্ভার ফল্ট সম্পর্কিত সম্পর্কিত প্রশ্ন ।
মাইকেল - ক্লে শিরকি কোথায়

উত্তর:


6

~/.ssh/config:

Host cluster
    ProxyCommand ~/bin/cluster-connect

~/bin/cluster-connect:

#!/bin/bash
socat stdio tcp:$(get_host):22

ধন্যবাদ। এটি (বা netcat $(get_host) 22) সংযোগের জন্য দুর্দান্ত কাজ করে। তবে, আমার কার্বেরোস শংসাপত্রগুলি পাস করার মতো মনে হচ্ছে না। আমি আমার ফাইলে পেয়েছি GSSAPIAuthentication yesএবং তার GSSAPIDelegateCredentials yesনীচে রয়েছি এবং হোস্টনামের ব্যাখ্যা দেওয়া থাকলে তারা কাজ করে তবে আমি প্রক্সিকম্যান্ডের মধ্য দিয়ে রুট না করি তবে। থটস? আমি প্রশ্নটিও সংশোধন করব। Host cluster.ssh/config
ডেভিড বি

আমি মনে করি না যে আপনি এটি অর্জন করতে পারবেন - sshসঠিক টিকিট পাওয়ার জন্য অবশ্যই হোস্টের নামটি অবশ্যই জানতে হবে এবং এটিকে গতিশীলভাবে সরবরাহ করার কোনও উপায় নেই (কেবলমাত্র একটি মোড়ক ব্যবহারের সংক্ষিপ্তসার ssh $(get_host) "$@"যা আমি বুঝতে পেরেছিলাম যে আপনি চান না) )। ক্লাস্টারের সমস্ত সার্ভারের একই কার্বেরোস অধ্যক্ষ থাকলে এটি কাজ করতে পারে তবে আমি মনে করি না যে কেউ কখনও এটি করে।
ব্যবহারকারীর 6868

দুর্ভাগ্যজনক, কিন্তু সংবেদন তৈরি করে। আমি একটি গতিশীল অনুসন্ধান / প্রতিস্থাপন (প্রশ্নে যুক্ত) করার জন্য একটি দ্রুত মোড়ক লিখেছি। এটি কিছু পরিস্থিতিতে ভাঙ্গবে, তবে আমার জন্য কাজ করে।
ডেভিড বি

গতিশীল অনুসন্ধান / প্রতিস্থাপন? ...
ব্যবহারকারীর 6868

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