हर बार न केवल 22 बल्कि सेकेंडरी पोर्ट की कोशिश के लिए ssh कैसे सेट करें?


9

लॉग में शोर को कम करने और खोज करने की क्षमता को कम करने के मेरे प्रयास के एक भाग के रूप में (और केवल सार्वजनिक कुंजी प्रमाणीकरण आदि की अनुमति देने में विफलता के कारण) मैं नियमित रूप से उन सर्वरों पर sshd- पोर्ट बदलता रहता हूं, जिन्हें मैं एक अलग पोर्ट पर सेट करता हूं, 5492 कहते हैं। वर्तमान में मैं अपने ssh कमांड में या तो 5492 अपेंड करता हूं, या प्रत्येक विशिष्ट सर्वर के लिए पोर्ट को अपने में जोड़ता हूं ssh_config

अगर पोर्ट 22 काम नहीं करता है, तो पोर्ट 22 और पोर्ट 5492 से कनेक्ट करने का प्रयास करने के लिए ssh को कॉन्फ़िगर करने का एक तरीका है?


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

2
@ रुईएफिबेरियो मैं सहमत हूं, कि यह अधिक सुरक्षित नहीं है। हालाँकि, यह लॉग फ़ाइलों में शोर को कम रखता है। कोई भी पोर्ट लॉगिंग का उपयोग लॉगिन प्रयासों को कम करने के लिए कर सकता है जो सुरक्षा को बढ़ाता है।
नेड 64

2
@RuiFRibeiro एक एसएसपी सर्वर की तुलना में एक वीपीएन सर्वर अधिक सुरक्षित है?
रिले

यह सब कार्यान्वयन पर निर्भर करता है। अपनी पूर्व नौकरी में, मैंने अतिरेक के लिए 2 वीपीएन प्रविष्टियों को परिभाषित किया, और sshबाहर के लिए कोई उपस्थिति नहीं थी ।
रुई एफ रिबेरो

2
अस्पष्टता द्वारा सुरक्षा एक अच्छी सेटअप के शीर्ष पर एक अच्छी ADDITIONAL परत है, खासकर जब यह अवसरवादी हमलावरों के बारे में है।
20

जवाबों:


11

आप एक शेल स्क्रिप्ट को चारों ओर से लपेट सकते हैं sshलेकिन sshखुद ऐसा नहीं करेंगे।

बैश फ़ंक्शन का उपयोग करने का एक तरीका यह है (इसमें डालें ~/.bashrc):

function ssh() { command ssh -p 22 "$@" || command ssh -p 5492 "$@"; }

वैसे, सिस्टम सेवाओं के लिए root-reserved पोर्ट्स का उपयोग करने की अनुशंसा की जाती है, sshताकि उपयोगकर्ताओं को उस प्रक्रिया से बचने के लिए कहा जा सके, जो कहता है, पोर्ट 5492। वे अन्यथा बीच में आदमी खेलते हैं और संभवतः लॉगिन डेटा कैप्चर कर सकते हैं। तो, एक पोर्ट <1024 का उपयोग करें।


1
यह एक महान समाधान है। बंदरगाहों पर भी एक महान नोट!
रिले

5
ध्यान दें कि दूसरा कनेक्शन तब भी बनाया जाएगा जब पहला सफल हो जाता है अगर कमांड sshगैर-शून्य रिटर्न करता है। एक तुच्छ उदाहरण होगा ssh user@server false
Kusalananda

1
@ कुसलानंद धन्यवाद, मैंने अब लिखा commandहै। बस पुनरावृत्ति से बचना चाहते थे, जैसा कि आपने सही अनुमान लगाया है।
नेड 64

समस्या @ कुसलानंद का उल्लेख (ज्यादातर) विशिष्ट निकास स्थिति के परीक्षण से बचा जा सकता है ssh- अगर कोई ssh त्रुटि है (जैसा कि दूरस्थ कमांड विफल होने का विरोध किया जाता है), यह 255 की स्थिति के साथ बाहर निकल जाएगी। इस प्रकार, command ssh -p 22 "$@"; if [ "$?" -eq 255 ]; then command ssh -p 5492 "$@"; fiकाम करना चाहिए।
गॉर्डन डेविसन

10

sshस्वयं यह Matchप्रलेखित दस्तावेज के माध्यम से कर सकता है , ssh_config(5)हालांकि दस्तावेज़ीकरण कुछ उदाहरणों पर विरल है। यह फॉर्म उपयुक्त हो सकता है अगर कोई SSH कॉन्फ़िगरेशन में जटिलता को धक्का देना चाहता है, हालांकि ssh_config(5)वाक्य रचना की सीमाओं द्वारा प्रतिबंधित है और वांछित परिणाम के लिए कुछ फ़िदालिंग की आवश्यकता हो सकती है। विशेष रूप से कस्टम पोर्ट को या तो सेट नहीं किया जा सकता है या पिछले Matchप्रयास से गलत तरीके से सेट किया जा सकता है । यही कारण है कि नीचे, इसे दो बार सेट किया जाता है, जब एक बार डिफ़ॉल्ट के लिए परीक्षण किया जाता है, और विहित दोष स्थापित करते समय सेट नहीं किया जाता है।

# here we set the defaults for the host (no port!)
Match !canonical host testhost
  CanonicalizeHostname yes
  Hostname 192.0.2.42
  IdentityFile ~/.ssh/id_blahblah
  ...
# port available?
Match canonical host 192.0.2.42 exec "is-ssh-up %h 2222"
  Port 2222
# or the default port
Match canonical host 192.0.2.42
  Port 22

is-ssh-up केवल यह जांचता है कि क्या दिए गए पोर्ट पर कुछ प्रतिक्रिया करता है और कैसा दिख सकता है

#!/usr/bin/env expect
package require Tcl 8.5
if {[llength $argv] < 2} {
   puts stderr "Usage: is-ssh-up host port"
   exit 1
}
puts stderr "is-ssh-up: DEBUG trying $argv"
set socket [socket -async [lindex $argv 0] [lindex $argv 1]]
chan event $socket readable [list exit 0]
after 3000 [list exit 1]
vwait godot

1
अगर-तो-में .ssh / config? मुझे विश्वास नहीं होता !!
आर्केमोर

1

~.ssh/configइस प्रविष्टि को अपनी सूची में रखकर आप वाइल्डकार्ड फ़ंक्शन का उपयोग कर सकते हैं :

Host *
Port 5492

लेकिन यह अपने आप में 22 तक नहीं गिरेगा।

यदि आप इसे अंत में रखते हैं, तो आप अभी भी इसे उन मेजबानों के लिए ओवरराइड कर सकते हैं जिन्हें आपको इसके ऊपर एक अलग मूल्य डालकर 22 की आवश्यकता थी। (और आप इसे हमेशा कमांड लाइन पर ओवरराइड कर सकते हैं।)

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