Ssh -N के लिए .ssh / config संबंधित विकल्प क्या है


14

मैं अपनी कॉन्फ़िग फ़ाइल में एक उपनाम सेट करना चाहता हूं जिसमें इस कमांड के समान परिणाम है:

ssh -N devdb -L 1234:127.0.0.1:1234

मेरे लिए .ssh / config प्रविष्टि devdb:

Host devdb
User someuser
HostName the_hostname
LocalForward 1234 127.0.0.1:1234

शेल शुरू न करने के लिए मैं उपरोक्त कॉन्‍फ़िगरेशन में क्या रखूँ?


+1 अच्छे प्रश्न के बारे में जो मुझे यह सोचने के लिए मिला कि कैसे रैंडम चीज़ों को टनलिंग बनाने के लिए जल्दी (मैं स्विच को याद रखने के लिए अक्सर ऐसा नहीं करता हूं, लेकिन मैं आमतौर पर समान पोर्ट का उपयोग करता हूं, यह केवल होस्ट है जो बदलता है)।
WEBjuju

जवाबों:


23

तो ssh.cOpenSSH 7.6p1 के लिए हम पाते हैं

            case 'N':
                    no_shell_flag = 1;
                    options.request_tty = REQUEST_TTY_NO;

तो -Nदो काम करता है:

  • no_shell_flagकेवल में प्रकट होता है ssh.cऔर केवल के लिए सक्षम है -Wया -Nविकल्प है, अन्यथा यह करने के लिए संबंधित कुछ तर्क ब्लॉक में प्रकट होता है ControlPersistऔर विवेक पृष्ठभूमि कांटे से जुड़े जाँच। मुझे ऐसा कोई तरीका दिखाई नहीं देता है जो कोई विकल्प सीधे सेट कर सके।
  • के अनुसार से मेल खाती में विस्तृत विकल्प ।readconf.crequest_ttyRequestTTYssh_config(5)

यह पत्तियां (बंदर के अलावा ओपनएसएसएच और recompiling, या के साथ ssh_configटॉगल करने के लिए एक विकल्प के लिए पूछ no_shell_flag...) कुछ इस तरह:

Host devdb
 User someuser
 HostName the_hostname
 LocalForward 1234 127.0.0.1:1234
 RequestTTY no
 RemoteCommand cat

जो तकनीकी रूप से एक शेल शुरू करता है, लेकिन उस शेल को तुरंत उस catप्रोग्राम से बदलना चाहिए जो तब पोर्ट को आगे बढ़ाने की अनुमति देता है। catपोर्टेबल है, लेकिन इनपुट का उपभोग करेगा (यदि कोई है) या विफल हो सकता है (यदि मानक इनपुट बंद है)। एक और विकल्प कुछ ऐसा होगा जो सिर्फ ब्लॉक करता है


1
यह करने के लिए +1 .ssh/config... अच्छी तरह से किया!
WEBjuju

इस उत्तर पर बहुत बढ़िया शोध! धन्यवाद!
मधुर-पीला

मैं पसंद करता हूं RemoteCommand exec sleep infinity
थोमस

3

@thrig के पास यह पूरी तरह से करने की आपकी इच्छा के आधार पर सही उत्तर है .ssh/config

अन्य सुरंग कमांड को जल्दी बनाने के लिए डिफॉल्ट्स के साथ एक फ़ंक्शन का उपयोग करने पर भी विचार कर सकते हैं (विशेषकर यदि सुरंग नहीं बदलती है, लेकिन केवल होस्ट)।


sshn() {
  # set your desired host and port forwarding as default
  # and allow them to be passed in if you should need it

  host="${1:-devdb}"
  port="${2:-1234:127.0.0.1:1234}"

  # now all you have to do is `sshn` and it will connect

  echo "executing ssh -N $host -L $port"
  ssh -N "$host" -L "$port"
}

उपयोग में इसके तीन उदाहरण दिए गए हैं: बिना आर्गनों के फ़ंक्शन में निर्दिष्ट चूक का उपयोग किया जाता है:

$ sshn
executing -N devdb -L 1234:127.0.0.1:1234

सुरंग डिफ़ॉल्ट के साथ, एक अलग होस्ट पर चलाएँ:

$ sshn host2
executing ssh -N host2 -L 1234:127.0.0.1:1234

दोनों चूक के साथ, एक नया मेजबान / सुरंग के लिए एक पूर्ण-बंद चलाएं:

$ sshn host3 12345:127.0.0.1:12345
executing ssh -N host3 -L 12345:127.0.0.1:12345

0

@ थ्रिग के उत्तर पर आधारित एक अधिक उपयोगी रिमोट कमांड:

Host someHost
Hostname 1.2.3.4
LocalForward 15673 localhost:15672
RequestTTY no
RemoteCommand bash -c 'echo "Listening on port 15673"; read -r -d '' _'

read -r -d '' _उपयोगकर्ता प्रेस जब तक कनेक्शन ब्लॉक कर देगा control+c

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