উত্তর: খোলা বন্দরের টেলনেট চেকের জন্য অন্য বিকল্প উপলব্ধ?


15

আমি উত্তরযোগ্য নতুন। এখানে আমার কাজ ...

আমার 400+ হোস্ট রয়েছে এবং আমার ওয়েব সার্ভারে 5 টি পৃথক বন্দর তাদের প্রান্ত থেকে খোলা আছে কিনা তা যাচাই করতে হবে।

স্বতন্ত্রভাবে, আমি লগ ইন এবং চালাতে পারে:

telnet mywebserver.com 443
telnet mywebserver.com 80
telnet mywebserver.com 8443

.. এবং তাই ..

কোন মডিউল বা প্লাগইন আনসিবলে ব্যবহার করা যেতে পারে যাতে আমি এটি স্বয়ংক্রিয় করতে পারি এবং ফলাফলগুলি (উন্মুক্ত বা বন্ধ পোর্ট কিনা) আমার উত্তরীয় সার্ভারে ফিরে রিপোর্ট করতে পারি?

উত্তর:


28

আপনি জবাবদিহিত অপেক্ষার জন্য মডিউলটি ব্যবহার করতে পারেন যা একটি নির্দিষ্ট টিসিপি পোর্ট খোলা আছে তা পরীক্ষা করে।

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

- name: Check all port numbers are accessible from current host
  wait_for:
    host: mywebserver.com
    port: "{{ item }}"
    state: started         # Port should be open
    delay: 0               # No wait before first check (sec)
    timeout: 3             # Stop checking after timeout (sec)
  ignore_errors: yes
  with_items:
    - 443
    - 80
    - 80443

ডিফল্টরূপে, উত্তরযোগ্য প্রতি সেকেন্ডে একবার চেক করবে ( sleepঅ্যাট্রিবিউটটি ব্যবহার করে উত্তর ২.৩ এ কনফিগারযোগ্য ), সুতরাং এটি প্রতি বন্দরে 3 বার পরীক্ষা করবে।

আপনার 400+ হোস্টের জায়ের বিপরীতে একটি প্লেবুকে এটি চালান - উত্তরযোগ্য সমান্তরালে যাচাই করে যে সমস্ত হোস্টগুলি mywebserver.comসেই বন্দরগুলিতে পৌঁছতে পারে ।

আমরা ignore_errors: yesএখানে ব্যবহার করি যাতে কোনও ত্রুটি লাল চিহ্নিত করা যায় তবে সম্পাদন বন্ধ না করে।

খোলা পোর্টগুলি okআউটপুট হিসাবে আইটেম হিসাবে রিপোর্ট করা হয় এবং বন্ধ বন্দরগুলি হিসাবে রিপোর্ট করা হয় failed( এই আউটপুটটি দেখতে আপনাকে অবশ্যই -vvপতাকা ব্যবহার করতে হবে ansible-playbook)।

ফাইন-টিউনিং আউটপুট

আপনি যদি সাফল্য এবং ব্যর্থতার ক্ষেত্রে আরও নির্দিষ্ট আউটপুট চান তবে কোডটি আরও জটিল হতে হবে, দ্বিতীয় কাজটি যুক্ত করে:

  • wait_forটাস্ক অবশ্যই registerএকটি পরিবর্তনশীল
  • দ্বিতীয় কার্যটি debugসাফল্য / ব্যর্থতার অবস্থার উপর ভিত্তি করে আউটপুট উত্পাদন করে (যেমন জিনজা ২ শর্তসাপেক্ষ এক্সপ্রেশন ব্যবহার করে )
  • তারপরে আপনাকে এই দুটি কাজই একটি অন্তর্ভুক্ত ফাইলে (কোনও with_itemsলুপ ছাড়াই ) রাখতে হবে এবং একটি প্রধান প্লেবুক টাস্ক লিখতে হবে যা একটি বন্দর প্রতি একবার অন্তর্ভুক্ত ফাইলকে কল করতে একটি include... ব্যবহার with_itemsকরে।

গুরুত্বপূর্ণভাবে তাদের সেট করা দরকার host: mywebserver.com
মনিকা সেলিও

@ জিওনজিচিয়ামিওভ - host: xদরকার নেই। আমি সবেমাত্র উত্তরযোগ্য ২.৩.১ এর সাথে পুনরায় পরীক্ষা করেছি এবং বর্তমান সার্ভারের ডিফল্ট কার্যগুলির hostবৈশিষ্ট্য wait_forতালিকা থেকে প্রক্রিয়া করা হচ্ছে।
রিচভেল

ঠিক ঠিক এই কারণেই ওপিকে এটির ওভাররাইড করা দরকার: তারা তাদের সমস্ত সার্ভার থেকে অন্য ওয়েবসভারের সাথে সংযোগের পরীক্ষা করছে (প্রশ্নটি পুনরায় পড়ুন)।
মনিকা সেলিও

2
ভাল কথা, hostsগুণটি উত্তর সহ আপডেট করেছেন updated
রিচভেল

ধন্যবাদ! এটি আমার পক্ষে কাজ করে এবং আমাকে কাজ করার জন্য যথেষ্ট পরিমাণে দেয়।
এভিটাইটার

2

এএফআইএইকি এই উদ্দেশ্যে কোনও বিল্ট-ইন মডিউল নেই, তবে আপনি shell+ nc:

---
- hosts: all
  tasks:
    - shell: nc -z -w 1 -G 1 my.hostname.com {{ item }} || echo "Port {{ item }} is closed"
      with_items: [80,443,8443]

2
আপনাকে ধন্যবাদ, এটিও কাজ করে, তবে আমি প্রথম পরামর্শটি দিয়ে যেতে বেছে নিয়েছিলাম কারণ এটি আমাকে নাটকটি আরও কাস্টমাইজ করতে দেয়।
এভিটাইটার

কি -G 1আমি এটা মানুষ পাতায় খুঁজে পাচ্ছেন না?
লোনিক্স

0

আপনি একই জন্য অপেক্ষা_র জন্য মডিউল ব্যবহার করতে পারেন

দস্তাবেজ থেকে উদ্ধৃত উদাহরণ:

- name: Wait 300 seconds for port 8000 of any IP to close active connections, don't start checking for 10 seconds
  wait_for:
    host: 0.0.0.0
    port: 8000
    delay: 10
    state: drained

দয়া করে আপনার পোস্টটি যথাযথভাবে ফর্ম্যাট করার চেষ্টা করুন, স্ট্যাক এক্সচেঞ্জ নেটওয়ার্কের সমস্ত সাইট একই মার্কডাউনকে অনুমতি দেয়, ফর্ম্যাটের জন্য ডকুমেন্টেশন এখানে রয়েছে
তেনসিবাই

3
বিটিডব্লিউ আমিও ব্যর্থ হয়েছি এই উত্তরটি কী যুক্ত করেছে যা রিচভেল উত্তরে ইতিমধ্যে নেই
টেনসাইবাই

0

আমরা এই জাতীয় কাজের জন্য আমাদের ডিডিএ-সার্ভারস্পেক ( https://github.com/DomainDrivenArchitecture/dda-serverspec-crate ) ব্যবহার করি। আপনি আপনার প্রত্যাশা সংজ্ঞায়িত করতে পারেন

{:netcat [{:host "mywebserver.com" :port "443"} {:host "telnet mywebserver.com" :port "80"} {:host "telnet mywebserver.com" :port "8443"}]}

এবং এই প্রত্যাশাটি স্থানীয় হস্ট বা দূরবর্তী স্থানে ssh দ্বারা পরীক্ষা করুন। দূরবর্তী পরীক্ষার জন্য আপনাকে লক্ষ্যগুলি নির্ধারণ করতে হবে:

{:existing [{:node-name "test-vm1"
:node-ip "35.157.19.218"}
{:node-name "test-vm2" :node-ip "18.194.113.138"}] :provisioning-user {:login "ubuntu"}}

আপনি পরীক্ষা চালাতে পারেন java -jar dda-serverspec.jar --targets targets.edn serverspec.edn

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