একটি .ssh / কনফিগারেশন হোস্টের একাধিক হোস্টনাম এন্ট্রি থাকতে পারে?


10

আমি এসএসএস এবং রাউটার পোর্ট ফরওয়ার্ডিং সেটআপ করেছি যাতে আমি যখন বাড়িতে না থাকি তখন আমার হোম নেটওয়ার্কের কম্পিউটারে প্রবেশ করতে পারি। বর্তমানে আমার .ssh/configফাইলে আমার দুটি প্রবেশ রয়েছে একটি যখন আমি আমার হোম নেটওয়ার্কে থাকি এবং একটি যখন আমি নই:

Host mycomputer
  HostName 192.168.X.X

Host mycomputerathome
  HostName my.no-ip.dynamic

এটি কাজ করে তবে আমি ভাবছি যে আমি নিজের জিনিসগুলিকে আরও সহজ করে তুলতে পারি। আমি আশা করছিলাম যে একাধিক হোস্টনাম এন্ট্রি তালিকাভুক্ত করার একটি উপায় আছে যাতে প্রথম ব্যর্থ হলে এটি দ্বিতীয়টিতে ফিরে যায়:

Host mycomputer
  HostName 192.168.X.X
  HostName my.no-ip.dynamic

যাতে এটি প্রথমে আমার স্থানীয় নেটওয়ার্কের কোনও হোস্টের সাথে সংযোগ স্থাপনের চেষ্টা করবে এবং যদি তা উপস্থিত না থাকে, তবে এটি আমার নো-আইপি গতিশীল হোস্টের নামটি ব্যবহার করে সংযোগ দেওয়ার চেষ্টা করবে। আমি দুটি হোস্টনাম প্রবেশ করার চেষ্টা করেছি তবে ssh mycomputerকিছুই করতে না পেরে কেবল ব্লক চালিয়ে যাচ্ছি ।

আমি কীগুলির পক্ষে পাসওয়ার্ডের প্রমাণীকরণটি বন্ধ করে দিয়েছি যাতে আমি যখন আমার বাড়ির নেটওয়ার্কে না থাকি তখন দুর্ঘটনাক্রমে স্থানীয় নেটওয়ার্কে একটি কম্পিউটারের সাথে সংযোগ স্থাপন করার পরে আমার পাসওয়ার্ডটি যাতে না হয় সেদিকে ঝুঁকি নেওয়া উচিত নয়।

যদি প্রথমটি কাজ না করে তবে ফ্যালব্যাক হোস্টনেমস চেষ্টা করা সম্ভব?


unix.stackexchange.com/questions/424755/… অনুরূপ এবং সম্ভবত পোর্টের পরিবর্তে হোস্টনামের জন্য অভিযোজিত হতে পারে
থ্রিজ

বিটিডাব্লু, .ssh/configনির্দিষ্ট বৈশিষ্ট্যের জন্য স্ক্রিপ্ট চালাতে পারে। আমি জানি আপনি প্রক্সিকমন্ডের সাথে পারেন। আপনি এই প্রশ্নোত্তর থেকে এসএফ - সার্ভারসফল্ট / প্রশ্ন / 401233 /… থেকে দেখানো হিসাবে কিছু করতে পারেন ।
slm

উত্তর:


8

এটি কুৎসিত, তবে আমি মনে করি আপনি কোনও বন্দরের নকটির প্রস্থান পরিস্থিতি হিসাবে মানদণ্ডটি ব্যবহার করে এটি করতে পারেনexecMatch

Host mycomputer
  Match exec "nc -z 192.168.1.11 %p"
    HostName 192.168.1.11
  Match !exec "nc -z 192.168.1.11 %p"
    HostName my.no-ip.dynamic

মনে রাখবেন যে আপনি "আপনার" হোম নেটওয়ার্কে রয়েছেন কিনা তা এটি সত্যই বলতে পারে না - ঠিক আপনি একই ঠিকানা সীমাতে একটি বেসরকারী ল্যান সেগমেন্টে রয়েছেন যা একই ঠিকানা / বন্দরে কোনও পরিষেবা শোনার ক্ষেত্রে ঘটে।


1
আমাকে একটি যোগ করতে হবে -w 1বা অন্যথায় ncচিরকাল অপেক্ষা করতে হবে বলে মনে হচ্ছে। দ্বিতীয়টি যা সহজ হতে পারে তা হ'ল Match exec "true"প্রথম ম্যাচটি যদি ব্যর্থ হয় তবে অন্ধভাবে দ্বিতীয় পছন্দটি চেষ্টা করে দেখতে পারেন।
কোরি ওগবার্ন

@ কোরিওগবার্ন আহা হ্যাঁ আমি বিকল্প অবস্থার (করুণার কিছু Matchনেই Else) করার সবচেয়ে সুন্দর উপায় সম্পর্কে চিন্তা করার চেষ্টা করছিলাম
স্টিল্ড্রাইভার

সুতরাং আমি এই পদ্ধতির সাথে একটি ইস্যু মধ্যে দৌড়ে। আমি xyz.com বলে একটি সাইটও চালাচ্ছি এবং যখন আমি এটির চেষ্টা ssh xyz.comকরেছি Match exec "true"এবং আমার দূরবর্তী হোস্টনেমটি ব্যবহার করে আমাকে আমার হোম সার্ভারে পুনঃনির্দেশিত করেছি। আমি আপনার এক্সিকিউট দিয়ে চেষ্টা করব কিন্তু আমি মনে করি একই জিনিস ঘটবে।
কোরি ওগবার্ন

হ্যাঁ, আপনার ব্যবহারের Match exec... Match !execফলে অন্যান্য ডোমেনগুলিতে সংঘাতের কারণ হ'ল হোস্টনামটি ট্রিগার করতে Match !execএবং পুনরায় লেখার জন্য।
কোরি ওগবার্ন

2
সুতরাং এটি সক্রিয় যে ~/.ssh/configইন্ডেন্টেশন সম্পর্কে কম যত্ন নিতে পারে না। নির্দিষ্ট কমান্ডগুলি সুযোগটি পুনরায় সেট করে, অর্থাত্ প্রতিটি নতুন হোস্ট লাইন বলে "পূর্ববর্তী লাইনগুলি পূর্বের হোস্টের জন্য ছিল, নিম্নলিখিত হোস্টগুলি এই নতুন হোস্টের জন্য।" দেখা যাচ্ছে Matchহোস্টের মতো একই "স্কোপ রিসেট" পাওয়ার রয়েছে। এই হিসাবে অ্যাকাউন্টে, আমি আমার হোস্ট লাইনটি প্রতিস্থাপন করেছি Match Host mycomputer exec "nc -w 1 -z 192.168.X.X 22"এবং আমার স্থানীয় নেটওয়ার্কের জন্য সমস্ত কাস্টম মান সংজ্ঞায়িত করেছি। আমি তখন একটি ম্যাচিং লাইন !execযুক্ত করেছি এবং যখন আমি নেটওয়ার্ক বন্ধ থাকি তার জন্য সমস্ত মান যুক্ত করেছিলাম। এখন এটি সমস্ত হোস্টের জন্য দুর্দান্ত কাজ করে।
কোরি ওগবার্ন 21

2

আমি এই মত ব্যবহার করছি।

Match host mycomputer exec "nc -G 1 -z 192.168.1.11 %p"
    HostName 192.168.1.11
Match host mycomputer # fallback
    HostName my.no-ip.dynamic
Host mycomputer
    # ... other configs

Host not-my-computer
# ... other configs

ssh_config এর ইনডেন্টেশন ব্লকের মতো কিছু নেই। আপনি যদি কোনও নির্দিষ্ট হোস্টের সাথে ম্যাচ বাক্যটি সীমাবদ্ধ করতে চান তবে আপনার সম্পূর্ণ শর্তটি বর্ণনা করা উচিত।

আপনি ncএটি -G 1(সংযোগের সময়সীমা 1s) বিকল্পটি দিয়ে দীর্ঘ অপেক্ষার এড়াতে পারবেন এবং এর একাধিক প্রার্থনা এড়াতে আপনি নিম্নলিখিত আচরণটি ব্যবহার করতে পারেনnc

ম্যাচটি
শর্তযুক্ত ব্লকের পরিচয় দেয়। ম্যাচ লাইনের সমস্ত মানদণ্ড যদি সন্তুষ্ট হয় তবে নিম্নলিখিত লাইনের কীওয়ার্ডগুলি কনফিগার ফাইলের গ্লোবাল বিভাগে সেট করা ওভাররাইড করে অন্য কোনও ম্যাচ লাইন বা ফাইলের শেষ না হওয়া পর্যন্ত। যদি সন্তুষ্ট সন্তুষ্ট একাধিক ম্যাচ ব্লকে কোনও কীওয়ার্ড উপস্থিত হয় তবে কীওয়ার্ডের প্রথম প্রথম প্রয়োগটি প্রয়োগ করা হবে।

https://www.freebsd.org/cgi/man.cgi?sshd_config(5)


1

না; যদি আপনি HostNameএকটি Hostপ্রবেশের জন্য একাধিক গুলি নির্দিষ্ট করে থাকেন তবে কেবল প্রথমটিকেই স্বীকার করা হবে:

$ grep -A5 Host .ssh/config
Host test
   HostName fake.tld.xyzzy
   HostName real.example.com
   HostName 127.1.2.3
   User username
$ ssh test
ssh: Could not resolve hostname fake.tld.xyzzy: Name or service not known

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