একাধিক হप्स এবং প্রম্পট প্রমাণীকরণের জন্য প্রক্সিকম্যান্ড ব্যবহার


18

আমি নিম্নলিখিত কমান্ডটি কীভাবে পুনরায় লিখতে পারি ProxyCommand?

ssh -l username1 -t jumphost1 \
ssh -l username2 -t jumphost2 \
ssh -l username3 -t jumphost3 \
ssh -l username4    server

এটি কাজ করে না

ssh -o ProxyCommand="\
ssh -l username1 -t jumphost1  \
ssh -l username2 -t jumphost2  \
ssh -l username3 -t jumphost3" \
    -l username4    server

username1@jumphost1's password:
Pseudo-terminal will not be allocated because stdin is not a terminal.
Permission denied, please try again.
Permission denied, please try again.
Permission denied (publickey,gssapi-keyex,gssapi-with-mic,password).
ssh_exchange_identification: Connection closed by remote host

আমি এর সাথে এর ব্যবহার সম্পর্কে সচেতন nc, তবে আমি এটি 3+ হপ দিয়ে ব্যবহার করার উপায় অনুসন্ধান করছি এবং এর সাথে এই বিকল্পটিও ব্যবহার করব scp। আমি ssh_configম্যান পৃষ্ঠাটি যাচাই করেছিলাম , তবে তথ্যটি আমার কাছে কমপক্ষে ce

সম্পাদনা

নীচে প্রস্তাবিত হিসাবে আমি ProxyCommandঅন্যে নেস্টেড ব্যবহার করার চেষ্টা করেছি ProxyCommandতবে আমি সর্বদা নিম্নলিখিত লাইনের সাথে কিছু পাই

debug3: ssh_init_stdio_forwarding: 192.17.2.2:2222
debug1: channel_connect_stdio_fwd 192.17.2.2:2222
debug1: channel 0: new [stdio-forward]
debug2: fd 4 setting O_NONBLOCK
debug2: fd 5 setting O_NONBLOCK
debug1: getpeername failed: Bad file descriptor
debug3: send packet: type 90
debug2: fd 3 setting TCP_NODELAY
debug3: ssh_packet_set_tos: set IP_TOS 0x10
debug1: Requesting no-more-sessions@openssh.com
debug3: send packet: type 80
debug1: Entering interactive session.

ভাগ্যক্রমে, যেহেতু 7.3 -Jবা ProxyJumpআমার উদ্দেশ্যটি পরিবেশন করে - যদিও আমাকে এখনও আমার কীগুলি সেটআপের জন্য কাজ করতে হবে।

ssh -q -J user1@jumphost1,user2@jumphost2,user3@jumphost3 user@server

উত্তর:


26

ncসংস্করণ আর বাঞ্ছনীয় নয়। -Wওপেনএসএসএইচ-এর সাম্প্রতিক সংস্করণগুলিতে সরবরাহ করা সুইচটি ব্যবহার করুন । এছাড়াও, আপনাকে অন্য হোস্টগুলিতে কনফিগারেশন অনুলিপি করার দরকার নেই! সমস্ত কনফিগারেশন আপনার হোস্টে করা দরকার এবং এটি কোনওভাবেই হস্তক্ষেপ করে না scp। কেবল একটি ফাইল তৈরি করুন ~/.ssh/config:

Host jumphost1
  User username1
Host jumphost2
  User username2
  ProxyCommand ssh -W %h:%p jumphost1
Host jumphost3
  User username3
  ProxyCommand ssh -W %h:%p jumphost2
Host server
  User username4
  ProxyCommand ssh -W %h:%p jumphost3

এবং তারপরে ব্যবহার করে ssh serverবা সংযোগ করুন scp file server:path/। যদি আপনি oneliner (বা আপনার ProxyCommandবাসা বাঁধার বিষয়ে কী বোঝায় তা নিশ্চিত না হন ), তবে ইতিমধ্যে উল্লিখিত হিসাবে, এটি পলায়নকারীদের জাহান্নাম:

ssh -oProxyCommand= \
  'ssh -W %h:%p -oProxyCommand= \
    \'ssh -W %h:%p -oProxyCommand= \
      \\\'ssh -W %h:%p username1@jumphost1\\\' \
    username2@jumphost2\' \
  username3@jumphost3' \
username4@server

আপনার মূলত ভিতর থেকে যেতে হবে।


ধন্যবাদ। ওয়ান-লাইনার চেষ্টা করে, কাজ করেনি। আমি জানি না এটি কেবল পালাচ্ছে কিনা। আপনি দয়া করে ডাবল চেক করতে পারেন? এছাড়াও, আপনি কীভাবে বাসা বাঁধার প্রয়োজনীয় এবং শৃঙ্খলা কাজ করে না তা ব্যাখ্যা করতে পারেন?
1.61803

1
ঠিক আছে, "কাজ করে না!" এর অর্থ কি? চেইন কাজ করে, তবে তা নয় scp, কারণ এসসিপি এসসিপি নিয়ন্ত্রণ বার্তাগুলির প্রত্যাশা করে তবে পরিবর্তে এসএসএইচ নিয়ন্ত্রণ বার্তা পেয়ে যায় এবং ব্যর্থ হয়। অন্যদিকে, ProxyCommandএটি স্বচ্ছভাবে করে এবং তাই বহিরাগত ssh(বা scp) অন্য প্রান্ত থেকে সরাসরি বার্তা পাবে।
জাকুজে

আমি > প্রম্পটটি পেয়েছি যেখানে লাইন ধারাবাহিকতা ভাঙ্গার অপেক্ষায় রয়েছে, আমি অনুমান করি - অর্থাৎ কমান্ডটি কখনই কার্যকর করে না।
1.61803

1
@ ট্র্যাভারবয়ডস্মিথ কারণ এটির জন্য আপনাকে সমস্ত প্রক্সি হোস্টে কিছু বাহ্যিক প্রোগ্রাম (এনসি) ইনস্টল করা দরকার। IO-W ব্যবহার করে পুনঃনির্দেশের দরকার নেই এবং কেবলমাত্র আপনার কম্পিউটারে ওপেনশায় ক্লায়েন্ট ইনস্টল করা দরকার।
জাকুজে

2
@ রোমানডোডিনের দ্বিগুণ %কাজ করা উচিত: %%hআপনার ক্ষেত্রে
জাকুজে

-1

আমি দুটি হপ দিয়ে এটি করেছি, তবে এটি তিনটির জন্য কাজ করা উচিত। সহজ উপায় হ'ল ~/.ssh/configপ্রতিটি হোস্টে ফাইল সেট করা। সুতরাং, আপনি যদি যেতে চান এবং হোস্টক্লের মাধ্যমে hostaযেতে চান তবে আপনি আপনার কনফিগারেশনগুলি এভাবে সেট করতে পারেন:hostdhostb

ইন hosta:~/.ssh/config:

Host hostd
    User username
    ProxyCommand ssh hostb nc %h %p 2> /dev/null

ইন hostb:~/.ssh/config:

Host hostd
    User username
    ProxyCommand ssh hostc nc %h %p 2> /dev/null

ইন hostc:~/.ssh/config:

Host hostd
    User username
    ProxyCommand ssh hostd nc %h %p 2> /dev/null

তারপরে আপনি ssh hostdশৃঙ্খলে থাকা যেকোন হোস্টকে করতে পারেন এবং আপনি নিজের পথে যাবেন hostd

প্রক্সিটির জন্য নেটক্যাট ব্যবহার হস্তক্ষেপ করে না scp

যদি কোনও কারণে আপনি স্থানীয় ~/.ssh/configফাইলগুলি ব্যবহার করতে চান না , আপনি এটি করতে পারেন hosta:

ssh -oProxyCommand='ssh -oProxyCommand=\'ssh -o ProxyCommand=\\\'ssh username@hostd nc %h %p 2>/dev/null\\\' username@hostc nc %h %p 2> /dev/null' username@hostb nc %h %p 2> /dev/null' username@hostd

যেমনটি আমি বলেছি, আমি ncএর ব্যবহার সম্পর্কে সচেতন । ProxyCommandএকটি বিকল্প হিসাবে আমি যে কমান্ডটি দিয়েছিলাম সেগুলি আপনি কি পুনরায় লিখতে পারবেন ?
1.61803

আপনি উল্লেখ করেছেন "আপনি এর ব্যবহার সম্পর্কে সচেতন তবে ব্যবহার করতে চান scp"। এতে কোনও হস্তক্ষেপ হয় না scp। তবে আমি শীঘ্রই আপনাকে সম্পাদনা হিসাবে কমিকালি দীর্ঘ কমান্ড দেব।
ডোপঘোতি

ধন্যবাদ। ProxyCommandবাসা বাঁধার উপর দৃষ্টি নিবদ্ধ করে আপনি কি কেবল নিজের উত্তরটি আবার লিখতে পারবেন ? আপনি যদি আমার পোস্টটি আবার পড়েন তবে আপনি দেখতে পাবেন that's আমি ভেবেছিলাম যে আপনার মতো বাসা বাঁধার পরিবর্তে আমি মাঝারি সমস্ত নোডকে শৃঙ্খলিত করতে পারব ProxyCommand। আমি এখনও অবাক হই যদি এটি কোনওভাবে সম্ভব হয়।
1.61803

বাস্তবে যা হচ্ছে তা হচ্ছে; সমস্ত নেস্টেড (এবং ক্রমবর্ধমান পালিয়ে যাওয়া) কোটগুলির কারণে সিটু কনফিগারেশনের চেয়ে এটি পড়া খুব বেশি শক্ত । আপনাকে সেভাবেই করতে হবে কারণ আপনি সমস্ত ProxyCommandনির্দেশিকা আপনার সাথে চেইনের পরবর্তী হোস্টে নিয়ে যাচ্ছেন।
ডোপঘোতি 21

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