Ition / .ssh / কনফিগারেশনে শর্তাধীন প্রক্সিকম্যান্ড?


14

আমি আমার ~/.ssh/configবিভিন্ন কোম্পানির ভিপিএন থাকাকালীন অথবা এসএসএইচ প্রক্সি সার্ভারের মাধ্যমে অ্যাক্সেসযোগ্য বিভিন্ন হোস্টের সাথে কনফিগার করেছি ।

এই মুহূর্তে আমার সবেমাত্র

Host internal-server
    ProxyCommand ssh -W internal.ip:22 external-server

তবে আমি যদি অভ্যন্তরীণ নেটওয়ার্কে আছি তবে আমি সরাসরি অভ্যন্তরীণ আইপিটি অ্যাক্সেস করতে পারি, সুতরাং বাহ্যিক সার্ভারের মাধ্যমে প্রক্সিং করা সংযোগে কেবল বিলম্ব যোগ করে।

যদি অভ্যন্তরীণ আইপিটি পৌঁছনীয় না হয় এবং অন্যথায় সরাসরি সংযোগ স্থাপন করি তবে আমি কীভাবে প্রভিশনিকভাবে প্রক্সি তৈরি করতে পারি?

উত্তর:


8

আমি সাধারণত কিছু সেট আপ করি। এটি ধরে নিয়েছে মধ্যবর্তী হোস্টটি নামটি সমাধান করতে সক্ষম হবে।

Host *%homeproxy
    ProxyCommand ssh user@proxyhost /bin/netcat -w 1 $(echo %h | cut -d%% -f1) 22

সুতরাং আমি মত সংযোগ করতে হবে ssh blah%homeproxy


আমার গুগল-ফু আমাকে ব্যর্থ করছে। আপনি এই আরও ব্যাখ্যা করতে পারেন? আমি এই *% সিনট্যাক্স এর আগে কখনও দেখিনি।
fukawi2

3
%চরিত্রটি নিয়ে বিশেষ কিছু নেই । আপনি সত্যিই কিছু ব্যবহার করতে পারে। শতাংশটি যেহেতু এটি হোস্ট-নেম, বা ব্যবহারকারীর নামতে বৈধ নয়। cutপ্রক্সিকম্যান্ডের সাথে থাকা কমান্ডটি হোস্টের নামটি %খুঁজে বের করতে ডিলিমিটার হিসাবে ব্যবহার করে ।
জোরডাচি

1
এটি ভাল, তবে এর অর্থ এই নয় যে আমাকে ssh ওরফেটির পরিবর্তে পুরো হোস্টনামটি বানান করতে হবে।
Alt

@ মোবিয়েন্স এটির অর্থ হ'ল সংযোগের প্রতিটি ভিন্ন মাধ্যমের জন্য আপনার আলাদা নাম প্রয়োজন । আমার ক্ষেত্রে, উদাহরণস্বরূপ, আমি ঘরে থাকলে আমি ব্যবহার করি ssh targetH, যার অর্থ বাড়ি থেকে লক্ষ্য । স্থানীয় নেটওয়ার্কে যদি লক্ষ্য করা যায়, সহজভাবে ssh target। উত্তরে যদিও এই উত্তরটি আরও সোজাসাপ্টাভাবে বলা ভাল লাগবে।
রুবেেন্স

4

আমি ম্যাচ ব্যবহার করে একটি ভিন্ন পদ্ধতি ব্যবহার করি। আমার ক্ষেত্রে, আমি একটি স্থানীয় প্রক্সি এটি ব্যবহার না করে চলতে, বা না চালানোর জন্য ব্যবহার করতে চাই it নিম্নলিখিত নির্দেশটি এটিকে সুন্দরভাবে সম্পাদন করে:

Match Exec "nc -z 127.0.0.1 1086"
    ProxyCommand nc -X 5 -x 127.0.0.1:1086 %h %p

এটি প্রতিটি এসএসএস প্রচেষ্টার সাথে মেলে এবং ncআমার প্রক্সিটি 1086-এ চলছে কিনা তা দেখার জন্য একটি দ্রুত চেক কার্যকর করে (যার ক্ষেত্রে ncকোনও ত্রুটি ছাড়াই প্রস্থান করা হয়)। যদি এটি হয় তবে এটি প্রক্সিকম্যান্ড সেট করে।


2

এক দশক আগে আমি এই জাতীয় দৃশ্যের জন্য একটি প্রক্সি কমান্ড লিখেছিলাম । আপনার ব্যবহারের ক্ষেত্রে আমার প্রক্সি কমান্ডটি এভাবে ব্যবহার করা যেতে পারে:

Host internal-server
    ProxyCommand ssh-multipath-proxy %h:%p -- ssh -W %h:%p external-server

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


2

@ অব উত্তর এর জন্য ধন্যবাদ , এটি আমাকে অনেক অনুপ্রাণিত করেছে।

আমি খুঁজে পেয়েছি যে আপনি জোর করে এর সাথে আপনার সংযোগটি পুনর্নির্দেশ করতে পারেন ProxyCommand nc dst dst-port

উদাহরণস্বরূপ, আপনি B.comযদি ব্যবহার করেন তবে প্রকৃতপক্ষে আপনি সংযোগ স্থাপন করবেন

ssh A.com -o ProxyCommand="nc B.com 22"

তবে UserKnownHostsFileএখনও রেকর্ড হবেA.com

সুতরাং আপনি নিজেরটিতে একটি ডোমেন "স্বয়ং" যুক্ত করতে পারেন ssh_config

Host auto.internal-server
  Hostname {internal-server ip or domain}
  ProxyCommand bash -c '(timeout 0.1 nc -z %h %p) && nc %h %p || ssh -W %h:%p external-server'

আমি এর সাথে প্রতিস্থাপন nc -w 1 %h %pকরেছি (timeout 0.1 nc -z %h %p) && nc %h %p, আপনি যদি 100 মিমি থেকে কম অভ্যন্তরীণ-সার্ভারে পৌঁছতে পারেন তবে এটি আরও দ্রুত হবে।

বা আপনি এর দ্বারা প্রতিস্থাপন করতে পারেন pingতবে আপনি যদি টিসিপি ভিত্তিক প্রক্সি ব্যবহার proxychainsকরেন বা সার্ভার আইসিএমপি প্রতিধ্বনির অনুমতি না দেয় তবে এটি খারাপ তথ্য নির্দেশ করতে পারে ।

Host auto.internal-server
  Hostname {internal-server ip or domain}
  ProxyCommand bash -c '(ping %h &>/dev/null) && nc %h %p || ssh -W %h:%p external-server'

আপনি (timeout 0.1 nc -z %h %p)অভ্যন্তরীণ-সার্ভারে আছেন কিনা তা সনাক্ত করে এমন কোনও কিছু দিয়ে আপনি প্রতিস্থাপন করতে পারেন ।

আপনার একাধিক প্রার্থী আইপি থাকলেও আপনি এটি ব্যবহার করতে পারেন:

Host auto.internal-server
  Hostname {internal-server ip or domain}
  ProxyCommand bash -c 'f(){(timeout 0.1 ping -c 1 $1 &>/dev/null) && nc $1 %p;}; f 1.1.1.1 || f 2.2.2.2 || f 3.3.3.3'

এটি সংযোগ দেওয়ার চেষ্টা করবে 1.1.1.1, ব্যর্থ হলে সংযোগ দেওয়ার চেষ্টা করবে 2.2.2.2এবং তারপরেও 3.3.3.3


0

এটি একটি অতিরিক্ত অতিরিক্ত 0.1s বিলম্বের সাথে অটোমেজিকভাবে আরও কিছুটা কাজ করে:

Host proxyhost.example.com
ProxyCommand none

Host *.example.com
ProxyCommand sh -c "socat 2>/dev/null - tcp4:%h:%p,connect-timeout=0.1 || exec ssh -W  %h:%p proxyhost.example.com"

0

আমি সাধারণত অন্য এন্ট্রিটি এমন কিছু তৈরি করতাম -

Host myVM
    ProxyCommand ssh -W internal.ip:22 external-server
    User ubuntu

Host myVM-np
    User ubuntu

তারপরে আপনার বর্তমান প্রক্সি পরিবেশের উপর নির্ভর করে আপনার কেবলমাত্র একজনকেই অনুরোধ করুন।

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