स्यूडो-टर्मिनल आवंटित नहीं किया जाएगा क्योंकि स्टडिन एक टर्मिनल नहीं है


14

मैं एक सर्वर के माध्यम से स्वत: SSH hopping स्थापित करने की कोशिश कर रहा हूं जिसमें nc नहीं है।

यह कमांड लाइन से काम करता है:

ssh -A gateway ssh steve@target

(मैंने अपनी सार्वजनिक कुंजी को SSH एजेंट में जोड़ लिया है)।

हालाँकि, इसे ~ /। Ssh / config में जोड़ना शामिल नहीं है:

Host target
  User steveb
  ProxyCommand ssh -A gateway ssh steve@targetip

$ ssh target
Pseudo-terminal will not be allocated because stdin is not a terminal.


^CKilled by signal 2.

इस मुद्दे -tपर जोर- जबरदस्ती करने की कोशिश की जा रही है लेकिन यह बेकार है।

ProxyCommand ssh -A -t gateway ssh steve@targetip

$ ssh target
Pseudo-terminal will not be allocated because stdin is not a terminal.
Pseudo-terminal will not be allocated because stdin is not a terminal.


^CKilled by signal 2.

और अधिक -t? अच्छा नहीं।

ProxyCommand ssh -A -t -t gateway ssh steve@targetip

$ ssh target
tcgetattr: Inappropriate ioctl for device


^CKilled by signal 2.

क्या यह संभव है? अधिकांश ट्यूटोरियल (जैसे http://www.arrfab.net/blog/?p=246 ) उपयोग करने का सुझाव देते हैं nc


क्या निष्कर्ष है कि netcat की आवश्यकता है?
माउंटेनएक्स

ऐसा दिखता है। इस उदाहरण में, मैं इसे स्थापित करने में सक्षम था, मेरी समस्या को हल कर रहा था - लेकिन मेरे पास हमेशा वह लक्जरी नहीं है।
स्टीव बेनेट

नीचे दिए गए दो तरीकों के लिए मेरा जवाब देखें मैं बिना नेटकैट के ऐसा करने में सक्षम था।
माउंटेनएक्स

जवाबों:


13

SSH ProxyCommand बिना netcat के

ProxyCommand बहुत उपयोगी है जब मेजबान केवल अप्रत्यक्ष रूप से सुलभ हैं। Netcat के साथ यह आगे की ओर स्थिर है:

ProxyCommand ssh {gw} netcat -w 1 {host} 22

यहाँ {gw} और {host} गेटवे और होस्ट के लिए प्लेसहोल्डर हैं।

लेकिन यह तब भी संभव है जब गेटवे पर नेटकट स्थापित नहीं किया गया हो:

ProxyCommand ssh {gw} 'exec 3<>/dev/tcp/{host}/22; cat <&3 & cat >&3;kill $!'

/ Dev / tcp मानक बैश की एक अंतर्निहित सुविधा है। फ़ाइलें मौजूद नहीं हैं। यह जांचने के लिए कि बैश में यह सुविधा बिल्ट-इन उपयोग रन है:

cat < /dev/tcp/google.com/80 

... प्रवेश द्वार पर।

यह सुनिश्चित करने के लिए कि बैश का उपयोग किया जाता है, उपयोग करें:

ProxyCommand ssh {gw} "/bin/bash -c 'exec 3<>/dev/tcp/{host}/22; cat <&3 & cat >&3;kill $!'"

और यह ControlMaster के साथ भी काम करता है।

(पृष्ठभूमि को साफ करने के लिए किल को शामिल करने के लिए 22 अक्टूबर को अपडेट किया गया) (प्लेसहोल्डर को अपडेट करने के लिए प्लेसहोल्डर्स को और अधिक स्पष्ट और समझाने / देव / टीसीपी के लिए)

100% श्रेय स्कैंडल को। यहाँ स्रोत है:
http://www.rschulz.eu/2008/09/ssh-proxycommand-without-netcat.html
वहाँ टिप्पणियों में अधिक उपयोगी जानकारी देखें।

यहाँ और भी है:
http://www.linuxjournal.com/content/tech-tip-tcpip-access-use-bash
http://securityreliks.securegossip.com/2010/08/eneable-devtcp-on-backtrack -4r1ubuntu /

अद्यतन : यहाँ मार्को से कुछ नया है

एक प्रॉक्सी के संदर्भ में ~ / .ssh / config में जहां एक लाइन इस तरह है:

ProxyCommand ssh gateway nc localhost %p

मार्को कहते हैं:

यदि आपको ओपनएसएसएच के हाल के संस्करण का उपयोग करना है तो आपको नेटकैट की आवश्यकता नहीं है। आप n लोकलहोस्ट% p को -W लोकलहोस्ट:% p से बदल सकते हैं।

परिणाम इस तरह दिखेगा:

ProxyCommand ssh gateway -W localhost:%p

8

बिग टी, छोटी टी नहीं।

-T' Disable pseudo-tty allocation.
-t' Force pseudo-tty allocation. 

मेरी स्क्रिप्ट उस संदेश को वापस करती थी, और अब नहीं है।

/usr/bin/ssh -T -q -i $HOME/.ssh/one_command other_system

मैं authorized_keyएक कमांड चलाने के लिए इसका कारण other_system पर उपयोग करता हूं :

from="my.mydomain.com",command="bin/remotely-run" ssh-rsa ... 

3

इसे आजमाइए:

ProxyCommand ssh -A -t gateway ssh -t steve@targetip

रुको, जो मैंने कोशिश की है उससे कैसे अलग है?
स्टीव बेनेट

@SteveBennett अंतर यह है कि यह केवल दूसरी प्रणाली पर TTY आवंटित करने की कोशिश नहीं करता है, बल्कि पहले पर भी है।
हॉके लैगिंग

यह वास्तव में उसी आदेश का उल्लेख है जिसका मैंने "मनोरंजक लेकिन अप्रभावी" परिणाम के साथ उल्लेख किया है?
स्टीव बेनेट

@SteveBennett मैं वास्तव में गलत है। मेरा उद्देश्य -tदोनों कनेक्शनों में था और मैंने इसे गलत में देखा। मैंने अपना उत्तर संपादित कर दिया है।
हौके लैगिंग

आह। खैर, अभी भी अच्छा नहीं है। सभी संयोजनों की कोशिश की।
स्टीव बेनेट

-3

आप सर्वर 2 में ssh'ing के बाद सर्वर 2 में ssh'ing की निम्नलिखित तकनीक की कोशिश कर सकते हैं।

$ ssh -t user1@server1 ssh -t user2@server2 

ऐसा करना मेरे लिए काम करता है।


1
कृपया अधिक समझाएं ... यह आदेश क्या करता है और उत्तर को हल करने के लिए कैसे उपयोगी है।
तेजस
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.