এ থেকে বি থেকে সি পর্যন্ত এসএসএইচ, বিতে ব্যক্তিগত কী ব্যবহার করে


59

আমি আমার স্থানীয় মেশিন, এ, থেকে একটি প্রক্সি, বি এর মাধ্যমে গন্তব্য হোস্ট সি-র কাছে এসএসএইচ করার সহজ উপায় খুঁজছি, সিতে পাবলিক কী সহ যে ব্যক্তিগত কীটি রয়েছে তা বিতে রয়েছে, এবং আমি পারি না আমার লোকাল মেশিনে এই চাবিটি রেখে দিন। কোন টিপস?

এছাড়াও, আমি ~ / .ssh / কনফিগার ব্যবহার করে এটি করতে সক্ষম হতে চাই।

ধন্যবাদ!


1
আপনি কি বলছেন যে আপনি এ থেকে বি, এবং তারপরে এসএসএইচ থেকে সিএস করতে চান? অথবা প্রক্সিটি কি সত্যিকারের পরিস্থিতি?
দু'বার পাতলা করুন

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

উত্তর:


74

স্কিম্যাটিক:

    ssh       ssh
A ------> B ------> C
    ^          ^
 using A's   using B's
 ssh key     ssh key

পূর্বশর্ত:

  • A ssh-এজেন্ট চলছে;
  • Aঅ্যাক্সেস করতে পারেন B;
  • Bঅ্যাক্সেস করতে পারেন C;
  • Aএর ssh সর্বজনীন কী উপস্থিত রয়েছে B:~/.ssh/authorized_keys
  • Bএর ssh সর্বজনীন কী উপস্থিত রয়েছে C:~/.ssh/authorized_keys

ইন ~/.ssh/configউপর A, অ্যাড

Host C
    ProxyCommand ssh -o 'ForwardAgent yes' B 'ssh-add && nc %h %p'

যদি বি তে আপনার ssh প্রাইভেট কীটি কোনও মানহীন স্থানে থাকে তবে এর পথটি যুক্ত করুন ssh-add

আপনি এখন অ্যাক্সেস করতে সক্ষম হওয়া উচিত Cথেকে A:

A$ ssh C
C$

13
এটি মাত্র 4 বছর সময় নিয়েছে, তবে মনে হচ্ছে আমাদের উত্তর আছে! অসাধারণ
র‌্যাঙ্গলার

3
ওপেনশ v.7.3 দিয়ে শুরু করে আপনি কেবল ব্যবহার করতে পারবেন ProxyJump B। উত্স: উইকিবুকস
কিথ

2
এটিকে কী সংজ্ঞায়িত করা যায়: হোস্ট ইউজার 1 @ সি প্রক্সিকমন্ড ssh -o 'ফরওয়ার্ড এজেন্ট হ্যাঁ' ইউজার 2 @ বি 'এসএসএড-এন্ড & এনসি% এইচ% পি'
রবীন্দ্রনাথ আকিলা

2
মেশিন বি না থাকলে কীভাবে সমাধানের পরিবর্তন হবে nc?
mjalajel

1
@DrewVS ঠিক আছে, এক যোগ করার প্রয়োজন ForwardAgent yes আগেProxyJump কমান্ড।
গ্রিফার

22

নিম্নলিখিতটি কাজ করছে কিনা তা পরীক্ষা করুন।

ssh -t B ssh C

আপনি বিতে সঞ্চিত কী ব্যবহার করতে চাইলে নিম্নলিখিত কমান্ডটি ব্যবহার করুন

ssh -t B ssh -i /path/to/identity_on_B C

এখানে আমরা ssh -i /path/to/identity_on_B Cলগ-ইন শেলের পরিবর্তে বি তে কার্যকর করতে কমান্ড উল্লেখ করছি ।


এই কাজ করে কিন্তু এটি IdentityFile B. থেকে এটা এখনও উপর উ দেখায় কুড়ান না
কলহকারী

@ ড্র্রুভিএস আমি উত্তর আপডেট করেছি। এটি আপনার জন্য কাজ করছে কিনা তা পরীক্ষা করে দেখুন।
শচীন দিভেকার

শচীন, খুব চতুর। যে নিখুঁতভাবে কাজ। অনেক ধন্যবাদ!
র্যাংলার

@ ড্র্রুভিস শুনে এটি খুশি হয়েছিল যে এটি আপনার পক্ষে কাজ করেছে। সুতরাং দয়া করে উত্তরটি গ্রহণ করুন।
শচীন দিভেকার 19

তবে, দেখে মনে হচ্ছে এটি পাসওয়ার্ড সুরক্ষিত আরএসএ কীগুলির সাথে কাজ করে না। পাসওয়ার্ড ইনপুটটি লুকানো আছে, ব্যবহারকারীকে এই পদ্ধতিতে কাজ করার জন্য তাদের এসএস-কী-তে কী যুক্ত করতে বাধ্য করা হয়েছে। কোন ধারনা?
র্যাংলার

10

আমি এখন এটি কাজ করেছি। এখানে সমাধানটি দেওয়া হয়েছে, যা বরং সোজা। আমার তাড়াতাড়ি দেখা উচিত ছিল:

~ / .Ssh / কনফিগ:

Host B
  HostName 1.2.3.4
  User myuser
  IdentityFile ~/.ssh/rsa_key
  ControlMaster auto
  ControlPath ~/.ssh/socket/master-%l-%r@%h:%p

Host C.*
  User customer_username
  Port customer_port
  IdentityFile remote/path/to/ssh/key
  ForwardAgent yes
  ProxyCommand ssh accessable.server nc %h %p

Host C.server-1
  HostName 2.3.4.5

'বি' হ'ল এমন প্রক্সি সার্ভার যা আপনি ঝাঁপিয়ে পড়ছেন। আপনি সাধারণভাবে কোনও সার্ভারে অ্যাক্সেস কনফিগার করার কারণে এটি কনফিগার করা উচিত।

'সি' গন্তব্য হোস্ট। সংযোগ প্রক্রিয়ায় এটি 'বি' ব্যবহার করার জন্য কনফিগার করা দরকার। 'সি' তে পরিচয় ফাইল হ'ল 'বি' -তে এস-এস-কী-এর পথ। প্রক্সিকমন্ড 'সি' থেকে 'বি' থেকে সংযোগ খোলার জন্য নেটক্যাট ব্যবহার করে। নেটক্যাট, বা এনসি, 'বি' তে ইনস্টল করা প্রয়োজন।

আশা করি এটি অন্যকে সহায়তা করবে।


3
আমি খুব শীঘ্রই কথা বললাম। এই সমাধানটি কাজ করতে দেখছে না। কীটি ssh-এজেন্টে লোড করা হয়েছিল, তাই আমি ভেবেছিলাম এটি কাজ করছে। উপরের দিকে, সি এর জন্য কীটি এখনও বি তে নয়, এ-তে থাকা দরকার
র্যাংলার

2

আমি মূলত দূরবর্তী দৃষ্টান্তে আমার এসএস কীগুলি তালিকাভুক্ত করার জন্য একটি সাধারণ স্ক্রিপ্ট লিখেছিলাম এবং তারপরে আমি আমার স্থানীয় এসএসএল এজেন্টে আমি নির্বাচিত একটিটি যুক্ত করেছি। এটি খুব পরিষ্কার নয়, তবে স্থানীয়ভাবে পরিবর্তে আমাকে সমস্ত কীগুলি দূরবর্তী অবস্থানে রাখতে সহায়তা করে।

কেউ আগ্রহী হলে এখানে স্ক্রিপ্টটি এখানে:

#!/usr/bin/ruby

require "rubygems"
require "fileutils"

# Get key list
key_list = (`ssh jumpbox "cd ~/.ssh/ ; ls id_rsa*" | sed 's/id_rsa_/  /g' | sed     's/id_rsa//g'`)
puts ' '
puts 'Available customer keys:'
puts key_list

# Get customer name input
puts ' '
puts 'Enter customer name: '
customer_name = gets.chomp

# Add key to ssh-agent
key_name = "~/.ssh/id_rsa_#{customer_name}"
puts ' '
puts "Adding #{key_name} to local ssh-agent"
`ssh jumpbox "ssh-add ~/.ssh/id_rsa_#{customer_name}"`
exit 0

আমি মনে করি একটি কী যুক্ত করার ফলে আদর্শ তালিকা পাওয়ার জন্য প্রয়োজনীয়তা বাদ দিয়ে আদর্শবান হিসাবে বিবেচনা করা যেতে পারে।
dmourati

আপনার সার্ভারফল্ট.com/a/701884/127993 গ্রহণ করা উচিত যা আপনি যা চান ঠিক তেমন করে।
sjas

1
#!/usr/bin/env bash
target_host=10.121.77.16
target_port=22
target_user=vagrant

bastion_user=yourusername
bastion_host=10.23.85.245
bastion_port=32780

scp -P $target_port -o ProxyCommand="ssh -o 'ForwardAgent yes' $bastion_user@$bastion_host -p $bastion_port 'ssh-add ~/.ssh/*.rsa && nc %h %p'" /tmp/x.txt $target_user@$target_host:/tmp/

1

করতে:

ssh someuser@IP_D

যেমন যে

A -> B-> C -> D আপনি যে হোস্ট এ আছেন সেখানে

আপনার স্থানীয়। / .ssh / কনফিগারেশন এর মতো সম্পাদনা করুন:

Host IP_D
  ProxyCommand ssh -o 'ForwardAgent yes' userX@IP_C 'ssh-add && nc %h %p'
Host IP_C
  ProxyCommand ssh -o 'ForwardAgent yes' userY@IP_B 'ssh-add && nc %h %p'

এই উত্তরটি নির্বাচিত উত্তরের ভিত্তিতে তৈরি। বিভিন্ন ব্যবহারকারী কীভাবে পুরো দৃশ্যের সাথে মানানসই তা আমাকে খুঁজে বের করতে হয়েছিল।

এটি আমার পক্ষে কাজ করে। আছে HTH।


0

স্নোবলের উত্তরটি অনেক সাহায্য করেছিল। তবে, আমি কমান্ডটিতে কিছু পরিবর্তন করেছি এবং এটি কীভাবে কাজ করে তা ব্যাখ্যা করতে চাই wanted এই পরিস্থিতি দেওয়া:

    ssh        ssh
A -------> B -------> C
     ^          ^
  using A's  using B's
  ssh key    ssh key

আপনার ~/.ssh/configফাইলটি সংশোধন করুন এবং যে হোস্টটি Bদিয়ে আপনি ঝাঁপিয়ে পড়তে চান সেটি জুড়ুন , ঠিক কীভাবে আপনি কোনও হোস্টকে সাধারণভাবে কনফিগার করবেন:

Host B
 User myusername
 HostName b.mycompany.com

তারপরে আপনি Cযে হোস্টটি শেষ করতে চান তা যুক্ত করুন:

Host C
 User myusername
 HostName c.intranet.mycompany.com
 ProxyCommand ssh -T -q -o 'ForwardAgent yes' B 'ssh-add -t 1 && nc %h %p'

নোট করুন ProxyCommand, যেখানে:

  • ssh -T -qইঙ্গিত দেয় যে এটি একটি সিডো-টিটিওয়াই ( -T) বরাদ্দ করা উচিত নয় এবং শান্ত হওয়া উচিত ( -q);
  • একবার জাম্প হোস্টে B, আমরা এসএসএইচ কীগুলির Aমাধ্যমে কীটি যুক্ত করব ssh-add;
  • যা কেবলমাত্র কাজ করে কারণ আমরা ব্যবহার করে এসএসএইচ এজেন্ট ফরওয়ার্ড করেছি -o 'ForwardAgent yes'
  • ssh-add -t 1 ইঙ্গিত দেয় যে আমি চূড়ান্ত হোস্ট সিতে অনুমোদনের জন্য প্রয়োজনীয় 1 সেকেন্ডের জন্য কীটি যুক্ত করা চাই;
  • এবং পরিশেষে, বন্দরে চূড়ান্ত হোস্টের সাথে nc %h %pএকটি netcatসংযোগ শুরু করে (উভয়ই এসএসএইচ ফাইলের তথ্যের ভিত্তিতে পূরণ করবে )।%h%p~/.ssh/config

যদি আপনার Bব্যবহারের জন্য একটি কাস্টম কী নির্দিষ্ট করতে হয় তবে আপনি ssh-addঅংশটি পরিবর্তন করে এটি করতে পারেন :

Host C
 User myusername
 HostName c.intranet.mycompany.com
 ProxyCommand ssh -T -q -o 'ForwardAgent yes' B 'ssh-add -t 1 ~/.ssh/mykey && nc %h %p'
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.