অরিজিনাল মেশিনের আইপি বা হোস্টনাম (এসএসএস) সন্ধান করা হচ্ছে


10

আমি বিভিন্ন শারীরিক অবস্থান (এবং এইভাবে বিভিন্ন শারীরিক মেশিন) থেকে ক্রমাগত বেশ কয়েকটি মেশিনের সাথে সংযোগ স্থাপন করি। এই অধিকাংশই সম্পন্ন করা হয় যদিও SSH, কখনও কখনও একটি গেটওয়ে মেশিন বা দুই প্রয়োজন হয় (যা আমি ডাকা মাধ্যমে ProxyCommand~/.ssh/config)। আমি জানতে চাইছি যে দূরবর্তী প্রান্তে প্রাথমিক সংযোগটি (যেমন আমি যে মেশিনটিতে কাজ করছি) মেশিনটির আইপি বা হোস্টনাম সনাক্ত করার কোনও পদ্ধতি আছে কিনা?

  • আমি সেট করতে রুট নেই এমন কিছু মেশিন হিসাবে পরিবেশের ভেরিয়েবলগুলি পাঠাতে চাই না PermitUserEnvironment
  • $SSH_CLIENTএনভায়রনমেন্ট ভেরিয়েবল সংযোগসমূহ জন্য দরকারী, কিন্তু শুধুমাত্র সাম্প্রতিকতম গেটওয়ে তালিকাবদ্ধ করে।

সমাধানের জন্য আমার বর্তমান ধারণাটি দখল করা $SSH_CLIENT, এটির দিকে ঝাঁকুনি দেওয়া, সেই মেশিনটির $SSH_CLIENTমান খুঁজে পাওয়া এবং এটি উপস্থিত না হওয়া পর্যন্ত পুনরাবৃত্তি করা; তারপরে হোস্টনামটি ধরুন এবং এটিকে কোনওভাবে পিছনে টানুন।

কিছুটা হ্যাক কাজের মতো মনে হলেও; কারও কি আরও ভাল পদ্ধতি আছে?

আমি বেশিরভাগ ব্যাশ শেলের মধ্যে কাজ করছি, তবে এমন কোনও পরামর্শের জন্য আমিও খুশি যা এটি ব্যবহার করে না।


প্রক্সিকম্যান্ডের অন্যতম উদ্দেশ্য অবশ্যই মূল হোস্টকে লুকিয়ে রাখতে (বা ভুলে যাওয়া) (যা উদাহরণস্বরূপ চূড়ান্ত হোস্ট থেকে রাউটেবল হতে পারে না)
হ্যাগেন ফন ইটজেন

আপনি কোথায় বা কেন আপনার এই তথ্যের প্রয়োজনের উদাহরণ দিতে পারেন? অন্যান্য অপ-সুস্পষ্ট সমাধান হতে পারে।
ম্যানওয়ে

@ মানভে আমি শেষ পর্যন্ত আমার .bashrc এর মতো জিনিসগুলিতে লোকেল নির্দিষ্ট বিভাগ স্থাপন করতে চাই। এখনই আমি যা করতে চাই তা হ'ল আমি কী মেশিন থেকে কাজ করছি তার উপর নির্ভর করে স্বয়ংক্রিয়ভাবে ভিমে তিনটি কীবোর্ড বিন্যাস সেট করুন।
জিওডাসিক

উত্তর:


3

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

ssh remote_host

আপনি লাইন বরাবর কিছু চালানো হবে

ssh remote_host -t "
    . /etc/profile; 
    . /etc/bash.bashrc; 
    DAT_ORIGIN_HOST=$(ifconfig eth0|grep -Po 't addr:\K[\d.]+') /bin/bash -l -i"

এটি যা করে তা হ'ল এটি লগিন শেলটি প্রবর্তনের পরিবর্তে এসএসএইচকে অন্য কিছু করতে দেয়। এটি একটি স্ট্রিং, যা কমান্ড হিসাবে দূরবর্তীভাবে চালানো হবে। আমরা একটি শেলটি খুব বিশেষ উপায়ে চালু করতে এটি ব্যবহার করি: আমরা এটিকে একটি পরিবেশগত পরিবর্তনশীল দেই DAT_ORIGIN_HOST, এতে আমাদের ইথ0 এ আইপি রয়েছে (আপনার এটি পরিবর্তন করার প্রয়োজন হতে পারে)।

আমরা যে কৌশলটি সম্পাদন করি তা হ'ল আমরা দূরবর্তীভাবে ডাবল কিউয়েটে চালানোর জন্য কমান্ডটি রেখেছি "। ডাবল উদ্ধৃতিগুলি (কমপক্ষে ব্যাশে) এর অর্থ, এটি যে এসএসএইচ-এর কাছে STRING পাঠানো হয়েছে তার আগে, আমাদের শেল এটি স্ক্যান করে এবং যেখানে উপযুক্ত সেখানে বিস্তৃতি / প্রতিস্থাপন সম্পাদন করে। এর অর্থ আমাদের শেলটি আমাদের বর্তমান আইপি ঠিকানায় to $ (ifconfig ...) অংশটি মূল্যায়ন করবে এবং ssh একটি স্ট্রিং পাস করবে যাতে আমাদের স্থানীয় আইপি ঠিকানার সাথে পরিবেশগত পরিবর্তনশীল সংজ্ঞা রয়েছে।

রিমোট মেশিনে একবার লগ ইন হয়ে গেলে echo $DAT_ORIGIN_HOSTআপনার আইপি ঠিকানাটি মুদ্রণ করা উচিত।

এসএসএইচে এই কলটি বিকাশের জন্য আমি নির্লজ্জভাবে আইপি ঠিকানাটি বের করার জন্য এবং এখান থেকে -t এবং এখানে কীভাবে ইন্টারেক্টিভ কিছু চালু করতে হয়েছিল সেখান থেকে নিয়েছিলাম

দাবি অস্বীকার: আমি এর বিকল্প -lএবং -iবিকল্প সম্পর্কে অনিশ্চিত /bin/bash। হতে পারে আপনার এগুলি বাদ দেওয়া দরকার।


আপনি এখানে কিছু হতে পারে! আমি এটির সাথে কিছুটা সময় খেলব এবং আপনার সাথে ফিরে যাব।
জিওডাসিক

সিউডো টিটি এবং রিমোট কমান্ড উভয়ই কাজ করে বলে আমি এই উত্তরটিকে চিহ্নিত করছি। দূরবর্তী কমান্ডের পরামর্শের ভিত্তিতে আমি আমার বিশেষ কেসটি ultimate E কলব্যাকের সাথে শেষ পর্যন্ত সমাধান করেছি - এটি কিছুটা পরিষ্কার এবং সাধারণ ব্যবহার হিসাবে শেষ হয়। ধন্যবাদ!
জিওডাসিক

2

আইডি আমি সঠিকভাবে বুঝতে পেরেছি আপনি সরাসরি উত্স মেশিন থেকে proxycommandহप्स সহ গন্তব্যে সংযোগ করছেন । এবং তাই এখানে আপনার জন্য তিনটি হ্যাক (ব্যবহারের দৃশ্যে মন্তব্য করার পরে তৃতীয়টি যুক্ত)। প্রথম) রিমোট পোর্ট ফরওয়ার্ডিং ব্যবহার করে আপনাকে আপনার সাথে মুল মেশিনটি ফিরে পেতে দেয় allow-R remotemachineport:dstonlocalnet:dstportonlocalnet

ssh -R 2222:localhost:22 user@target
# on "target" you can now do this to get back to origin host
ssh user2@localhost -p 2222 

দ্বিতীয়) AcceptEnv LC_*লক্ষ্য উপর আপত্তি । এটি দুর্দান্ত নয় তবে LOCALE ভেরিয়েবলগুলি এমনকি AcceptUserEnvicament পাওয়া যায় না এমন অনুমতি দেওয়া খুব সাধারণ। সুতরাং এখন আপনি এটি করতে পারেন:

export LC_SOURCEHOST=my.ip.addr.or:something
ssh user@target
# on tathet:
echo $LC_SOURCEHOST

তৃতীয়) হোস্ট বা হোস্টের ধরণ সনাক্ত করতে ssh রিমোট ফরোয়ার্ড ব্যবহার করুন।

# Here is an example what you can use on target machine. 
# This will modify your PS1 variable (prompt) based on source host (port forwarding)
# Add this to .bash_profile

function checkHost {
  RET=""
  ## loop over test port numbers 17891-17895 in my example
  for x in $(seq 1 5); do 
    # if netstat is not available test port some other way like with nc or something
    ## && RET= will set RET = 1-5
    /bin/netstat -lnt|/bin/grep -q 127.0.0.1:1789$x && RET=$x;
  done
  # return RET
  # please note that if you have multiple open connections with different port numbers
  # this method cannot not distinguish between them 
  echo $RET
}

# get 1-5 number from function above
VAL=$(checkHost)
# do something like set PS1 var or map vim file or something
export PS1='\[\033k\033\\\]\u@\h: \w\$ '$VAL

এখন পোর্ট ফরওয়ার্ডিংয়ের সাথে সংযুক্ত করুন:

### this will still enable ssh forwarding back. Change 22 to something else like 
### 24 to disable it (if nothing is listening on your source machines 24 port)
ssh -R 17891:localhost:22 user@target

পরামর্শগুলির জন্য ধন্যবাদ, তবে দু'টি এখনও আমার সম্পূর্ণ সন্তুষ্টির জন্য কাজ করে না। দূরবর্তী পোর্ট ফরওয়ার্ডটি কোনও খারাপ ধারণা নয়, তবে একটি প্রয়োজনীয় ধারণাটি হ'ল সমস্ত হোস্টে আপনার একই ব্যবহারকারীর নাম রয়েছে। এটি এখানে মামলা বা আমি পরিবর্তন করতে পারে এমন কিছু নয়। দ্বিতীয়: আমি এই কাজ করতে পারি না। আপনি কি এই বলে যে AcceptEnv LC_*হয় সাধারণত ডিফল্ট সেটিং দ্বারা অনুমোদিত, কিন্তু না একটি প্রমিত, উপর?
জিওডাসিক

ভাল, এলসি_ হিট এবং মিস আছে। এটি কতটা প্রচলিত তা নিয়ে আমি মন্তব্য করতে পারি না তবে এটি এমন কিছু যা কার্যকর হতে পারে .. (স্মরণ সংযোগের আগে LC_SOURCEHOST রফতানি করতে মনে রাখবেন)।
ম্যানওয়ে

এলসি_ * পরীক্ষা করেছেন এবং এটি কাজ করে। এটা কোনো তালিকাভুক্ত পরিবর্তনশীল হতে পারে AcceptEnvমধ্যে ডিরেক্টিভের /etc/ssh/sshd_configsshdএই ফাইলটি পরিবর্তন হয়ে গেলে পুনরায় চালু করতে ভুলবেন না ।
ডেভিড.পিরেজ

1

আপনি who -mবর্তমানে লগ ইন করা ব্যবহারকারী (হোস্টের নাম সহ) সম্পর্কিত তথ্য পেতে দূরবর্তী প্রান্তে টাইপ করতে পারেন । whoলগ ইন করা ব্যবহারকারীদের সম্পর্কে আপনাকে তথ্য দেয় এবং -mস্যুইচ আপনাকে "কেবল হোস্টনাম এবং স্ট্ডিনের সাথে যুক্ত ব্যবহারকারী" দেখায়।


এটি কেবল তখনই কার্যকর যদি আমি কোনও গেটওয়ে মেশিনের মাধ্যমে টানেলিং না করি।
জিওডাসিক

0

আপনি কি নিম্নলিখিত চেষ্টা করেছেন?

 netstat -an | grep " 22 "

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