এসএসএইচ টানেলের মাধ্যমে কীভাবে এসএসএইচ সংযোগের জন্য একটি শর্টকাট কনফিগার করতে হয়


22

আমার সংস্থার প্রোডাকশন সার্ভারগুলি (এফও, বার ...) দুটি গেটওয়ে সার্ভারের (এ, বি) এর পিছনে অবস্থিত। সার্ভার এফইও-তে সংযোগ স্থাপন করতে, আমাকে আমার ইউজারনেম জোহন্ডোই দিয়ে সার্ভার A বা B এর সাথে একটি এসএসএস সংযোগটি খুলতে হবে, তারপরে এ (বা বি) থেকে আমি কোনও প্রমিত সার্ভারে স্ট্যান্ডার্ড ইউজারনেম দিয়ে এসএসএইচ সংযোগটি খুলতে সক্ষম হতে পারি (আসুন এটি কল করুন WEBBY)।

সুতরাং, প্রতিবার আমাকে এমন কিছু করতে হবে:

ssh johndoe@a
...
ssh webby@foo
...
# now I can work on the server

আপনি যেমন কল্পনা করতে পারেন, যখন আমাকে ব্যবহার করার প্রয়োজন হয় scpবা আমাকে দ্রুত একাধিক সংযোগ খোলার প্রয়োজন হয় তখন এটি একটি ঝামেলা ।

আমি একটি ssh কী কনফিগার করেছি এবং আমি কিছু শর্টকাটগুলির জন্য .ssh / কনফিগার ব্যবহার করছি।

আমি ভাবছিলাম যে টাইপ করার জন্য আমি কোনও ধরণের ssh কনফিগারেশন তৈরি করতে পারি

ssh foo

এবং এসএসএইচকে আমার জন্য সমস্ত সংযোগ খুলতে / ফরোয়ার্ড করতে দিন। এটা কি সম্ভব?

সম্পাদন করা

ওয়াম্বলের উত্তর হ'ল আমি যা খুঁজছিলাম ঠিক তা এখনই মনে হচ্ছে আমি নেটকাট ব্যবহার করতে পারি না কারণ এটি গেটওয়ে সার্ভারে ইনস্টলড নেই।

weppos:~ weppos$ ssh foo -vv
OpenSSH_5.1p1, OpenSSL 0.9.7l 28 Sep 2006
debug1: Reading configuration data /Users/xyz/.ssh/config
debug1: Applying options for foo
debug1: Reading configuration data /etc/ssh_config
debug2: ssh_connect: needpriv 0
debug1: Executing proxy command: exec ssh a nc -w 3 foo 22
debug1: permanently_drop_suid: 501
debug1: identity file /Users/xyz/.ssh/identity type -1
debug2: key_type_from_name: unknown key type '-----BEGIN'
debug2: key_type_from_name: unknown key type 'Proc-Type:'
debug2: key_type_from_name: unknown key type 'DEK-Info:'
debug2: key_type_from_name: unknown key type '-----END'
debug1: identity file /Users/xyz/.ssh/id_rsa type 1
debug2: key_type_from_name: unknown key type '-----BEGIN'
debug2: key_type_from_name: unknown key type 'Proc-Type:'
debug2: key_type_from_name: unknown key type 'DEK-Info:'
debug2: key_type_from_name: unknown key type '-----END'
debug1: identity file /Users/xyz/.ssh/id_dsa type 2
bash: nc: command not found
ssh_exchange_identification: Connection closed by remote host

উত্তর:


36

কাইলের উত্তরের আরও কংক্রিট সংস্করণ হিসাবে আপনি নিজের ~/.ssh/configফাইলে যা রাখতে চান তা হ'ল:

host foo
  User webby
  ProxyCommand ssh a nc -w 3 %h %p

host a
  User johndoe

তারপরে, আপনি যখন "ssh foo" চালান, এসএসএইচ এসএসএইচ থেকে johndoe@aচালানো netcat( nc) চালানোর চেষ্টা করবে , তারপরে webby@fooএই টানেলের মাধ্যমে একটি এসএসএইচ সঞ্চালন করবে । ম্যাজিক!

অবশ্যই এটি করার জন্য, গেটওয়ে সার্ভারে নেটক্যাট ইনস্টল করা প্রয়োজন; এই প্যাকেজটি প্রতিটি বড় বিতরণ এবং ওএসের জন্য উপলব্ধ।


অসাধারণ! আমি এটি বের করার চেষ্টা করছিলাম, আমি আগে কখনই সেই সঠিক পরিস্থিতির দিকে যাইনি। আমি আমার উত্তরটি সেখানে রাখব, যদি এটি ভবিষ্যতে কম নির্দিষ্ট পরিস্থিতির সাথে অন্য কাউকে সাহায্য করতে পারে।
কাইল ব্র্যান্ড্ট 13

আমি আমার সংযোগের ভার্বোজ আউটপুট সহ আমার আসল প্রশ্নটি আপডেট করেছি। দেখে মনে হচ্ছে আমি নেটক্যাট ব্যবহার করতে পারি না। এটি ডিফল্টরূপে পাওয়া উচিত?
সিমোন কার্লেটি

সর্বদা নয়, এটি ইনস্টল করার ক্ষমতা কি আপনার আছে? আপনিও টেলনেটের সাহায্যে এটি করতে সক্ষম হবেন, আমি এর আগে কখনও চেষ্টা করিনি ...
কাইল ব্র্যান্ড্ট

আপনি নিজের হোম ডিরেক্টরিতে নেটকাট ডাউনলোড করতে এবং এটি সেখানে সংকলন করতে সক্ষম হতে পারেন। তারপরে আপনি কেবল প্রক্সি কমান্ডের পুরো পথটি ব্যবহার করতে পারবেন, যেমন / হোম / ইউজারনেম / বিন / এনসি
কাইল ব্র্যান্ড্ট

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

7

আপনি প্রক্সিকম্যান্ড নির্দেশিকাটি আপনার file / .ssh / config ফাইলটিতে ব্যবহার করতে পারেন, উদাহরণস্বরূপ রিলেট হিসাবে নেটক্যাট ব্যবহার করতে:

host server2
    ProxyCommand ssh server1 nc server2 22

আপনি কেবল 'ssh সার্ভার 2' ব্যবহার করবেন। এই নির্দেশিকার জন্য ম্যান পৃষ্ঠার তথ্য 'man ssh_config' তে পাওয়া যায়


5

আমি একটি ভিন্ন পদ্ধতির পছন্দ করি যা গেটওয়ে সার্ভারে প্রাক-প্রমাণীকরণযোগ্য টানেলটি বজায় রাখে। ইন ~/.ssh/config:

Host a
    ControlMaster auto
    ControlPath ~/.ssh/control-master/%r@%h:%p

তারপরে .bashrc:

s () {
        if ( ssh -O check a 2>&1 > /dev/null 2>&1 )
        then
                ssh -t a ssh $1
        else
                if [[ -S ~/.ssh/control-master/insyte@a:22 ]]
                then
                        echo "Deleting stale socket..."
                        rm ~/.ssh/control-master/insyte@a:22
                fi
                echo "Opening master session..."
                if ssh -Nf a
                then
                         ssh -t a ssh $1
                fi
        fi
 }

সুতরাং foo এ সংযোগ করতে:

s foo

প্রথমবার আপনি এটি সংযুক্ত করলে আপনাকে "ক" এর বিরুদ্ধে আপনাকে প্রমাণীকরণ করবে এবং একটি অবিরাম, পটভূমির এসএস টানেলটি খুলবে। "এস" -এর পরবর্তী কলগুলি প্রাক-অশেড টানেলের মাধ্যমে প্রায় তাত্ক্ষণিকভাবে খুলবে।

দুর্দান্ত কাজ করে।


2

এই ধরণের কার্যকারিতা ওপেনএসএসএইচের নতুন সংস্করণগুলিতে বিদ্যমান এবং এটি করে ব্যবহার করা যেতে পারে

ssh -W server2 server1

server2আপনার লক্ষ্যযুক্ত গন্তব্যটি কোথায় এবং server1আপনার প্রক্সি হোস্ট। আপনি ProxyCommandআপনার ssh কনফিগারেশনের বিকল্পটি ব্যবহার করে এটিকে আরও সহজ করে তুলতে পারেন:

host = *.example.com
user = packs
port = 22
ProxyCommand ssh -W %h:%p server1

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

@ স্টিভবেনেট: আমি এই পদ্ধতিটি কিছুক্ষণ ব্যবহার করছি, এটি দুর্দান্ত কাজ করে। আমাকে বেশ কয়েকটি RHEL5 সিস্টেমে নেটকাট পদ্ধতিতে ফিরে যেতে হয়েছিল, যা বিরক্তিকর ছিল।
স্কট প্যাক

2

netcatপ্রক্সিটিতে কখন উপলভ্য নয়, এই কৌশলটি ব্যবহার করে দেখুন:

host foo
  User webby      
  ProxyCommand ssh a 'exec 3<>/dev/tcp/foo/22; cat <&3 & cat >&3;kill $!'

host a
  User johndoe

তারপরে আপনার সক্ষম হওয়া উচিত ssh foo

এছাড়াও, যদি আপনার একটিতে ssh এর সাম্প্রতিক সংস্করণ থাকে (যেমন, -Wস্ট্যান্ডার্ড ইনপুট এবং আউটপুট ফরওয়ার্ডিংয়ের কমান্ড সহ ), আপনি ব্যবহার করতে সক্ষম হতে পারেন:

host foo
  User webby
  ProxyCommand ssh -W foo:%p a

host a
  User johndoe

পরিশেষে, কেবলমাত্র আমি দেখতে পেয়েছি এটি দুর্দান্ত (এবং ব্যবহারকারীর নামগুলির পার্থক্যের কারণে এটি আপনার নির্দিষ্ট ক্ষেত্রে কার্যকর হবে না), একটি বন্ধুর ব্লগ পোস্ট কীভাবে এই ধরণের জিনিসটিকে গতিশীল এবং পুনরাবৃত্তভাবে শৃঙ্খলাবদ্ধ এসএসএইচ প্রক্সিকে তৈরি করতে হবে তা নির্দেশ করে (কিছু জিনিস সহ) যে ভাল কাজ করে না):

host */*
  ProxyCommand ssh ${$(dirname %h)/\%%/@} nc ${$(basename %h)#*%%} %p

এবং তারপরে ssh machine1/machine2আপনাকে একটি শেল দেওয়া উচিত machine2, এর মাধ্যমে টুনেল করা machine1

আমি ভাবছি যদি কাস্টম sedকমান্ডগুলির পরিবর্তে কাস্টম কমান্ড ব্যবহার করা হয় dirnameএবং basenameবিভিন্ন ব্যবহারকারীর নাম দিয়ে সমস্যাটি সমাধান না করা যায়?


2

এটি করে কাজ সম্পাদন করা যায় ssh -At johndoe@a ssh webby@foo-Aকমান্ড সামনে আপনার SSH এজেন্ট, যখন (আপনি প্রক্সি পুনরায় প্রমাণীকৃত করতে থাকার এড়াতে পারেন তাই) -tনিশ্চিত টার্মিনাল প্রক্সি উপর বিদ্যমান। নিম্নলিখিত বাশ ফাংশন দরকারী হতে পারে:

ssh-bounce () {
    local cmd=""
    for i in "$@"; do
        cmd+="ssh -At $i "
    done
    $cmd
}

এটি এখন পর্যন্ত সবচেয়ে সহজ সমাধান। এখন এটির জন্য আরও 35 টি উর্ধ্বে দরকার। (বিটিডব্লিউ- এ আমার জন্য কিছু করে না))
স্টিভ বনেট

0
weppos:~ weppos$ ssh foo -vv
[..]
bash: nc: command not found

নেটক্যাট চালু নেই a। যখন আপনি চালাতে ssh host "command arg", commandউপর মৃত্যুদন্ড কার্যকর করা হয় host, আপনার স্থানীয় মেশিন নয়।


হ্যা আমি জানি. আমি ঠিক কমেন্টের জবাব দেওয়ার জন্য একটি মন্তব্যে জানিয়েছি। :)
সিমোন কার্লেটি

0

ওপেনএসএসএইচ 7.3 (2016-08-01) যেহেতু এক বা একাধিক এসএসএইচ ঘাঁটি বা "জাম্প হোস্ট" এর মাধ্যমে আরও সহজ দিকনির্দেশের অনুমতি দেওয়ার জন্য ProxyJumpবিকল্প এবং সংশ্লিষ্ট -Jকমান্ড-লাইন পতাকা উপলব্ধ রয়েছে।

এটি ওম্বলের সমাধানnc হিসাবে পাওয়া বাইরের কমান্ডের উপর নির্ভরশীলতা সরিয়ে দেয় ।

ssh -J johndoe@a webby@foo 

আপনার ওয়ার্কস্টেশন থেকে গেটওয়ে সার্ভারের কাছে একটি জন এসএসএইচ সংযোগ স্থাপন করবে aএবং এটির জন্য ওয়েববিয়ের জন্য হোয়ের জন্য এসএসএইচ সেশনটি সুড়ঙ্গ করবে।

আপনার ~/.ssh/configএবং যে আপনি কেবল কার্যকর করতে পারেন উভয়ের জন্য হোস্ট সংজ্ঞা তৈরি করতে সহজ করতেssh foo

Host a
    User johndoe

Host foo
    User Webby 
    ProxyJump a
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.