नेस्टेड ssh कमांड अग्रेषण


2

सामान्य तौर पर मैं दूरस्थ कंप्यूटर पर रियलटाइम ऑडियो सुन सकता था जैसे:

ssh me@gate rec -t mp3 - | play -

उदाहरण के लिए कंप्यूटर पर gateमैं कमांड rec(या sox) को निष्पादित कर सकता हूं और ऑडियो-स्ट्रीम नेटवर्क पर स्थानांतरित किया जाता है, इसलिए मैं इसे play(या sox) कमांड के माध्यम से वास्तविक समय में फिर से चला सकता हूं ।

यह ठीक काम करता है, खासकर क्योंकि मेरे पास gateमेरी नोटबुक से पासवर्ड-कम पहुंच है (उपयोग करते हुए authorized_keys & authorized_keys2)।

लेकिन मेरी टोपोलॉजी है:

+----+  internet   +------+  lan   +----------+
| my | ----------> | gate | -----> | internal |
+----+             +------+        +----------+

और मुझे COMP recमें निष्पादित करने की आवश्यकता है internalऔर इसे कंप्यूटर में कमांड पर stdoutपाइप किया जाना चाहिए ।playmy

तो, जब मैं कैस्केडिंग (घोंसला बनाना) कर रहा हूँ sshजैसे:

ssh -t me@gate ssh me@internal rec -t mp3 -

(नोट के -tलिए ssh)

  • इसलिए, gateपासवर्ड एक्सेस-कम है
  • पर gateनिष्पादित किया जाता है दूसरा (नेस्टेड)ssh
  • तो internalमुझसे पासवर्ड के लिए पूछता है ( -t)
  • और जब मैं पासवर्ड दर्ज करता हूं, तो internalसही ढंग से recकमांड शुरू होता है
  • और मैं अपने स्थानीय टर्मिनल पर प्राप्त बाइनरी डेटा-कचरा देख सकता था।

दुर्भाग्य से, यह काम नहीं करता है जब मैं पाइप करने की कोशिश कर रहा हूं play, जैसे कि यह

ssh -t me@gate ssh me@internal rec -t mp3 - | play -

काम नहीं करता है, क्योंकि Password:स्ट्रिंग पुनर्निर्देशित हो गया (जैसे मैंने पासवर्ड के लिए संकेत नहीं दिया), और playभ्रमित हो गया।

me@gate-> के बीच पासवर्ड-कम पहुंच स्थापित करने से me@internalशायद समस्या का समाधान हो सकता है, लेकिन मैं यह नहीं चाहता हूं - मैं चाहता हूं कि मैं पासवर्ड को internalCOMP में दर्ज करूं ।

कुछ पता है इसे कैसे हल करना है?


-tएक पासवर्ड ... नहीं मांगता है " अक्षम छद्म टर्मिनल आवंटन। "
Attie

साइड नोट: मुझे लगता है कि आपके पास इस पुराने प्रश्न का उत्तर देने के लिए ज्ञान हो सकता है ।
कामिल मैकियोरोस्की

जवाबों:


1

मुझे लगता internalहै कि मानक 22बंदरगाह पर सुनता है ।

पहले एक सुरंग का निर्माण करें:

ssh -N -L localhost:2222:internal:22 me@gate
# you can put it to background with &

फिर सुरंग के माध्यम से कनेक्ट करें। यह कनेक्शन यहां समाप्त होगा internal:

ssh -p 2222 me@localhost rec -t mp3 - | play -

internalपाइप के उपयोग के बावजूद आपसे आपका पासवर्ड पूछा जाना चाहिए ।


ssh -L …मेरे प्रश्न के उत्तर में समझाया गया है ।


0

मुझे लगता है कि पासवर्ड प्रॉम्प्ट रास्ते में नहीं मिलता है अगर आपका लैपटॉप internalसीधे एक्सेस करने में सक्षम है ?

यदि ऐसा है, तो ProxyCommandकॉन्फ़िगरेशन विकल्प के साथ एक नाटक करें।

कुछ इस तरह से अपने में डालें ~/.ssh/config

Host internal-via-gate
    User me
    Hostname internal
    Port 22
    ProxyCommand ssh gate nc %h %p

यह आपको बस चलाने की अनुमति देनी चाहिए ssh internal-via-gate, जैसे कि आप सीधे कनेक्ट कर रहे थे।


यदि नहीं, तो शायद बंदरगाह अग्रेषण पर विचार करें:

Host internal-via-gate
    User me
    Hostname internal
    Port 22
    ProxyCommand ssh gate nc %h %p
    LocalForward 27015 localhost:27015

फिर, कनेक्ट करें और प्रमाणित करें ( ssh internal-via-gate)।

एक बार लॉग इन करने के बाद, दौड़ें:

  • rec -t mp3 - | nc -l 27015 रिमोट पर, और
  • nc localhost 27015 | play - स्थानीय मशीन पर।
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.