सवाल बी से निजी कुंजी का उपयोग करते हुए ए से बी से सी तक एसएसएच


मैं अपनी स्थानीय मशीन, ए, प्रॉक्सी, बी, एक गंतव्य होस्ट, सी के माध्यम से एसएसएच के लिए एक आसान तरीका ढूंढ रहा हूं। सी पर सार्वजनिक कुंजी के साथ जाने वाली निजी कुंजी बी पर है, और मैं नहीं कर सकता उस कुंजी को मेरी स्थानीय मशीन पर रखो। कोई सुझाव?

इसके अलावा, मैं ~ / .ssh / config का उपयोग करके ऐसा करने में सक्षम होना चाहता हूं।

धन्यवाद!


44
2017-12-03 04:56


मूल


क्या आप कह रहे हैं कि आप ए से बी तक एसएसएच करना चाहते हैं, और फिर एसएसएच से सी? या प्रॉक्सी एक वास्तविक पास-थ्रू स्थिति है? - thinice
मैं बी से गुजरने के लिए ए से सी से एसएसएच करना चाहता हूं। नीचे मेरा जवाब भाग के माध्यम से गुजरने के लिए काम करता है, लेकिन यह अभी भी बी, पास-थ्रू होस्ट के बजाय मेरे स्थानीय कंप्यूटर पर आइडेंटिटीफाइल की तलाश करने का प्रयास करता है। - wrangler


जवाब:


योजनाबद्ध:

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

पूर्व शर्त:

  • A एसएसएच एजेंट चला रहा है;
  • A पहुंच सकते हैं B;
  • B पहुंच सकते हैं C;
  • Aएसएसएच सार्वजनिक कुंजी में मौजूद है B:~/.ssh/authorized_keys
  • Bएसएसएच सार्वजनिक कुंजी में मौजूद है C:~/.ssh/authorized_keys

में ~/.ssh/config पर A, जोड़ें

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

यदि बी पर आपकी एसएसएच निजी कुंजी गैर-मानक स्थान पर है, तो इसके बाद पथ जोड़ें ssh-add

अब आप तक पहुंचने में सक्षम होना चाहिए C से A:

A$ ssh C
C$

47
2018-06-26 14:46



इसमें केवल 4 साल लगे, लेकिन ऐसा लगता है कि हमारे पास जवाब है! बहुत बढ़िया - wrangler
Openssh v.7.3 से शुरू, आप बस उपयोग कर सकते हैं ProxyJump B। स्रोत: wikibooks - Keith
क्या इसे परिभाषित किया जा सकता है कि: होस्ट उपयोगकर्ता 1 @ सी प्रॉक्सी कॉमांड एसएसएच -ओ 'फॉरवर्डएजेंट हां' उपयोगकर्ता 2 @ बी 'एसएसएच-एड और एनसी% एच% पी' - Ravindranath Akila
यदि मशीन बी के पास समाधान नहीं है तो समाधान कैसे बदल जाएगा nc? - mjalajel
@DrewVS ठीक है, एक को जोड़ने की जरूरत है ForwardAgent yes  से पहले  ProxyJump आदेश। - Graipher


जांचें कि क्या काम कर रहा है या नहीं।

ssh -t B ssh C

यदि आप बी पर संग्रहीत कुंजी का उपयोग करना चाहते हैं तो निम्न आदेश का उपयोग करें।

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

यहां हम कमांड निर्दिष्ट कर रहे हैं i.e ssh -i /path/to/identity_on_B C लॉगिन शेल के बजाय बी पर निष्पादित किया जाएगा।


21
2017-12-03 05:34



यह काम करता है लेकिन यह बी से IdentityFile नहीं उठाता है। यह अभी भी ए पर दिखता है। - wrangler
@DrewVS मैंने जवाब अपडेट किया है। कृपया जांचें कि यह आपके लिए काम कर रहा है या नहीं। - Sachin Divekar
सचिन, बहुत चालाक। यह पूरी तरह से काम किया। बहुत बहुत धन्यवाद! - wrangler
@DrewVS यह सुनकर खुशी हुई कि यह आपके लिए काम करता है। तो कृपया जवाब स्वीकार करें। - Sachin Divekar
हालांकि, ऐसा लगता है कि यह पासवर्ड संरक्षित आरएसए कुंजी के साथ काम नहीं करता है। पासवर्ड इनपुट छुपा हुआ है, जिससे उपयोगकर्ता को इस दृष्टिकोण के लिए काम करने के लिए अपनी एसएसएच-कुंजी में कुंजी जोड़नी पड़ती है। कोई विचार? - wrangler


मैंने अभी यह काम किया है। यहां समाधान है, जो कि सीधा है। मुझे इसे जल्द ही देखना चाहिए था:

~ / .Ssh / config:

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

'बी' प्रॉक्सी सर्वर है जिसे आप कूद रहे हैं। इसे कॉन्फ़िगर किया जाना चाहिए क्योंकि आप आमतौर पर किसी सर्वर तक पहुंच कॉन्फ़िगर करेंगे।

'सी' गंतव्य मेजबान है। कनेक्शन प्रक्रिया में 'बी' का उपयोग करने के लिए इसे कॉन्फ़िगर करने की आवश्यकता है। 'सी' में पहचान फ़ाइल 'बी' पर एसएसएच-कुंजी का मार्ग है। ProxyCommand 'बी' से 'बी' से कनेक्शन खोलने के लिए नेटकैट का उपयोग करता है। नेटकैट, या एनसी, 'बी' पर स्थापित करने की आवश्यकता होगी।

उम्मीद है कि यह दूसरों की मदद करता है।


9
2017-12-03 14:21



मैंने बहुत जल्द बात की। यह समाधान काम नहीं देखता है। कुंजी एसएसएच एजेंट में लोड की गई थी, इसलिए मैंने सोचा कि यह काम कर रहा था। उपरोक्त में, सी के लिए कुंजी अभी भी ए पर नहीं है, बी नहीं। - wrangler


मैंने रिमोट इंस्टेंस पर मूल रूप से अपनी एसएसएच कुंजी सूचीबद्ध करने के लिए एक सरल लिपि लिखी, और फिर मैंने अपने स्थानीय एसएसएच एजेंट में चुने गए एक को जोड़ा। यह बहुत साफ नहीं है, लेकिन मुझे स्थानीय रूप से अपेक्षाकृत दूरस्थ स्थान पर सभी चाबियाँ रखने की अनुमति देता है।

यदि कोई दिलचस्पी लेता है तो यहां स्क्रिप्ट है:

#!/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

2
2018-02-16 20:32



मुझे लगता है कि एक कुंजी जोड़ने के लिए idempotent के रूप में माना जा सकता है जिससे कुंजी सूची प्राप्त करने की आवश्यकता को खत्म कर दिया जा सके। - dmourati
आपको स्वीकार करना चाहिए serverfault.com/a/701884/127993 जो वास्तव में आप चाहते हैं। - sjas


#!/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
2018-05-25 07:36





करने के लिए:

ssh someuser@IP_D

ऐसा है कि

A -> B-> C -> D जहां ए मेजबान है जिस पर आप हैं,

अपने स्थानीय ~ / .ssh / config को इस प्रकार संपादित करें:

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।


1
2018-01-28 11:49