सवाल क्लाइंट से प्रिंटिंग मोड से एसएसएच लॉगिन बंद करो?


मुझे एसएसएच पासवर्ड रहित सेट अप मिला है, हालांकि यह लॉग इन होने पर एमओटीडी को प्रिंट करता है। क्या क्लाइंट साइड से होने वाले स्टॉप को रोकने के लिए वैसे भी है?

मैंने कोशिश की ssh -q लेकिन यह काम नहीं करता है। मैं उपयोग नहीं करना चाहता ~/.hushlogin न ही मैं सर्वर सेट अप बदलना चाहता हूँ। काम करने वाली एकमात्र चीज सभी आउटपुट को शांत करना है >/dev/null 2>&1। हालांकि, अगर वास्तव में कोई समस्या है तो मैं त्रुटियों को अनदेखा नहीं करना चाहता हूं। यहां तक ​​कि कर रहा हूँ >/dev/null तब से काम नहीं करता है ssh लगता है कि stderr के लिए motd मुद्रित करने के लिए लगता है।

अद्यतन और तर्क मैं एक क्रॉन में बैकअप चला रहा हूँ। जब तक कोई त्रुटि नहीं हुई है तब तक मैं क्रॉन ईमेल नहीं प्राप्त करना चाहता हूं। हालांकि अगर motd मुद्रित है तो मुझे हर समय एक ईमेल मिलेगा।

मैं मोटा मुद्रित रखना चाहता हूं क्योंकि इसका कानूनी प्रभाव है। Motd का कहना है "unathorized पहुंच प्रतिबंधित"। लोगों को कानूनी रूप से इसे एक्सेस करने से रोकने के लिए आपको इस प्रकार का बयान होना चाहिए (जैसे कोई उल्लंघन नहीं करना)। इसलिए मैं इसे हर समय कंबल अक्षम नहीं करना चाहता हूं।


39
2017-07-06 15:22


मूल


क्या आप क्रॉन नौकरी के बारे में कुछ विवरण जोड़ सकते हैं ... - Kyle Brandt♦
Motd केवल इंटरैक्टिव सत्रों के लिए मुद्रित है। मैंने अभी इसका परीक्षण किया है, और ऐसा है:> $ ssh होस्ट → एमओटीडी मुद्रित> $ ssh होस्ट ls → केवल होम निर्देशिका की सामग्री प्रिंट करता है दूसरे शब्दों में, आप कुछ गलत कर रहे हैं; क्या आपने कोशिश की है? - niXar
चेक इन करने के लिए भी ध्यान देने योग्य है /etc/profile.d किसी भी स्क्रिप्ट के लिए जो वहां चल सकता है और लॉगिन पर कंसोल पर कुछ आउटपुट प्रिंट कर सकता है। - Dave
क्या वास्तव में एक कानून है जिसके लिए आपको "अनधिकृत पहुंच प्रतिबंधित" कहने की आवश्यकता है? मैंने सोचा कि डीएमसीए किसी भी प्रकार की इलेक्ट्रॉनिक प्रणाली को तोड़ने के लिए अवैध बनाता है (इससे कोई फर्क नहीं पड़ता कि कितनी खराब रक्षा हुई), इसलिए जब तक आपके पास कुछ प्रकार का पासवर्ड / एसएसएच कुंजी आवश्यकता हो, तो यह शुद्ध खिड़की ड्रेसिंग की तरह दिखता है। - Nick T


जवाब:


मुझे यकीन नहीं है कि आप इसे सही तरीके से करने के लिए क्यों उलझन में हैं - या तो सर्वर पर ला

PrintMotd no
PrintLastLog no

तथा

#/etc/pam.d/ssh
# Print the message of the day upon successful login.
# session    optional     pam_motd.so

या प्रत्येक उपयोगकर्ता के लिए ~ / .hushlogin जोड़ना।

संकेत, ~ / .hushlogin के लिए, इसे / etc / skel में जोड़ें ताकि उपयोगकर्ता के साथ नई उपयोगकर्ता होम निर्देशिका बनाई जा सके।

अद्यतन करें:

आपके बैकअप क्रॉन जॉब के बारे में अधिक जानकारी के बिना, मेरा एकमात्र अन्य सुझाव है कि कमांड के आउटपुट को फ़ाइल में रीडायरेक्ट करना है (या क्रॉन इसे ईमेल में कैप्चर करें) और एसएसएच सत्र के आउटपुट को / dev / null पर आउटपुट करना है। कुछ इस तरह:

0 0 * * * ssh backuphost "backup_script_that_writes_to_a_log" >/dev/null

या

0 0 * * * ssh backuphost "backup_command 2>&1" >/dev/null

मुझे थोड़ी देर के साथ खेलना होगा, लेकिन आपको शुरू करना चाहिए।


51
2017-07-09 08:56



मुझे "सही तरीके से करना" पसंद है। - Benoit
मैं इसे सर्वर से नहीं हटाना चाहता क्योंकि मुझे कानूनी कारणों से 'अधिकृत पहुंच प्रतिबंधित' नोटिस रखने की आवश्यकता है। - Rory
एफवीआई, नोटिस अनधिकृत पहुंच को रोकता नहीं है, यह केवल लोगों को सूचित करता है कि आप उचित कानूनी कार्रवाई कर सकते हैं (और करेंगे), और एक फोन वार्तालाप रिकॉर्ड करने के बारे में अधिसूचना की तरह, उनके उपयोग की निगरानी कर सकते हैं। - jtimberman
इसके अलावा, अगर आप क्रॉन नौकरी का उपयोग कर रहे हैं तो यह बहुत मददगार होगा। - jtimberman
.hushlogin अच्छा है - andrewtweber


यदि आप प्रति उपयोगकर्ता आधार पर यह चाहते हैं, तो बस एक करें touch ~/.hushlogin और आप ओपनएसएसएच के साथ पूरी तरह से सेट हैं।

अद्यतन करें: जैसा कि कहीं और बताया गया है, pam_motd प्रति उपयोगकर्ता का उपयोग न करने के लिए कॉन्फ़िगर किया जा सकता है .hushlogin; चेक /etc/login.defs के लिये HUSHLOGIN_FILE। यह सभी उपयोगकर्ताओं को सूचीबद्ध करने के लिए कॉन्फ़िगर किया जा सकता है /etc/hushlogins या इसी के समान।


14
2017-07-06 19:45



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


इस हैक के बारे में कैसे? ;-P

ssh -t user@machineName '/bin/bash'

निम्नलिखित है नहीं वैध:

पासिंग -T टीटी आवंटन को अक्षम करने के लिए एसएसएच को:

ssh -T machineName 'echo foo'

9
2017-07-06 15:30



ssh उपयोगकर्ता @ मशीन 'आपका कमांड यहाँ' किसी भी तरह से motd नहीं दिखाता है (यह एक इंटरैक्टिव खोल नहीं है)। - Marie Fischer
ओह अच्छा, प्वाइंट .... - Kyle Brandt♦
लेकिन इसका मतलब यह है कि "यह एक इंटरैक्टिव खोल नहीं है" क्योंकि मैंने कोशिश की और मैं आदेश चला सकता हूं कि मैं क्या खो रहा हूं -t - Ciasto piekarz
कृपया ध्यान दें कि "-t" जोड़ना व्यवहार को बदलता है (यह आपकी टीईआरएम सेटिंग्स के अनुसार प्रदर्शित होता है, आवश्यकता होने पर नियंत्रण वर्ण जोड़ता है)। यह कुछ कमांड के परिणाम को बदल सकता है (यह उदाहरण के लिए त्रुटियों को प्रस्तुत करने के लिए कर सकता है: ssh -t somehost "tar cf - कुछ फ़ाइलें"> local.tar # यहां उपयोग न करें ... विशेष रूप से यदि आप एक यूनिक्स होस्ट से ssh एक खिड़कियां एक। लेकिन अन्य मामलों में कई अन्य समस्याएं उत्पन्न हो सकती हैं)। अद्भुत @StephaneChazelas उत्तर देखें: unix.stackexchange.com/questions/151916/... - Olivier Dulac


@ नोट सभी उदाहरण मान लें कि आपने एक चर सेट किया है connectionString कुछ के साथ connectionString=user@server

का उपयोग करते हुए ssh -T सरल आदेशों के लिए काम करना चाहिए। उदाहरण के लिए यह कोई अतिरिक्त जानकारी मुद्रित नहीं करता है:

ssh -T $connectionString "echo 'blah'"

समस्या तब होती है जब आप कई आदेशों को चलाने के लिए यहां-डॉक का उपयोग करने का प्रयास करते हैं। उदाहरण के लिए - भाई काम नहीं करेगा - यह दिन (एमओटीडी) का संदेश गूंज देगा और आपको "stdin: tty नहीं है" दिखा सकता है।

somethingLocal='something local'
ssh -T $connectionString <<EOC
    echo 'blah'
    echo "blah $somethingLocal"
EOC

इस मुद्दे को हल करने के लिए आपको पहले स्थानीय चर में आदेशों को सहेजने की आवश्यकता है और उन्हें दूरस्थ सर्वर पर भेजना आवश्यक है।

somethingLocal='something local'
read -r -d '' commands <<EOC
    echo 'blah'
    echo "blah $somethingLocal"
EOC
ssh -T $connectionString "$commands"

लेकिन यह गन्दा है ...

अंतिम समाधान

एक सार्वभौमिक कार्य करें (ध्यान दें कि यह स्ट्रिंग या हेरडोक को कमांड के रूप में ले सकता है)।

function silentSsh {
    local connectionString="$1"
    local commands="$2"
    if [ -z "$commands" ]; then
        commands=`cat`
    fi
    ssh -T $connectionString "$commands"
}

उदाहरण

इस तरह इसका प्रयोग करें:

somethingLocal='something local'
silentSsh $connectionString <<EOC
    echo 'blah'
    echo "blah $somethingLocal"
EOC

या ऐसा ही है:

silentSsh $connectionString "echo 'blah'"

या ऐसा ही है:

silentSsh $connectionString <<'EOC'
    echo 'blah'
    somethingRemote=`echo 'whatever'`
    echo "blah $somethingRemote"
EOC

या यहां तक ​​कि ऐसा भी है:

silentSsh $connectionString < getlines.sh

6
2018-03-17 17:10



काश मैं इसके लिए और अधिक उपहास था। कुछ अति-स्क्रिप्ट-स्क्रिप्टिंग को समझने में हमें बहुत मददगार थी जो हमें करने की ज़रूरत थी। - csexton


यह ऑपरेटिंग सिस्टम क्या है? कुछ प्रणालियों (जैसे ubuntu) पर motd एसएसएच सर्वर द्वारा प्रिंट नहीं किया जाता है (प्रिंटमोड इन / etc / ssh / sshd_config), लेकिन pam_motd के साथ पैम द्वारा। यदि यह मामला है तो आप शायद इसे क्लाइंट से नियंत्रित नहीं कर सकते हैं।


3
2017-07-06 15:33



आप इसे एसएसएच क्लाइंट में नियंत्रित नहीं कर सकते हैं, लेकिन आप निश्चित रूप से क्लाइंट साइड पर देख सकते हैं :) .. विवरण के लिए मेरा जवाब देखें - drAlberT
नहीं, आपने मुद्रित होने वाले मोटर्स के आस-पास एक सुंदर रोचक / चालाक हैक प्रस्तावित किया है, ग्राहक द्वारा मुद्रित होने से रोकने के लिए कोई समाधान नहीं, जो सवाल था। - theotherreceive


या तो आपने जो भी वर्णन किया है उसकी कोशिश नहीं की है, या आपके सर्वर गलत कॉन्फ़िगर किए गए हैं!

आरएचईएल 5 पर मैंने अभी कोशिश की है:

workstation ~ $ ssh root@server
server ~ # echo "MOTD" > /etc/motd
server ~ # ^D
workstation ~ $ ssh root@server
MOTD
server ~ # ^D
workstation ~ $ ssh root@server echo notice the lack of motd
notice the lack of motd
workstation ~ $ 

मुझे नहीं लगता कि आपको गैर-संवादात्मक गोले में भेजे जाने वाले अस्वीकरण की आवश्यकता है, है ना? (यदि कोई आपको दावा करता है, तो मुझे एक एहसान दें, उन्हें पागल में लातें।) क्योंकि यही कारण है कि इंटरैक्टिव शैल और गैर-इंटरैक्टिव वाले लोगों के बीच एक अंतर है।

लेकिन किसी भी मामले में, मैं यही करता हूं क्योंकि मुझे क्रॉन से मेल पसंद नहीं है: मैं आउटपुट को लॉगर करने के लिए पाइप करता हूं। अपने पॉइंटलेस अस्वीकरण की पहली कुछ (चलो कहें 3) लाइनों को हटाने के लिए बस पूंछ के माध्यम से इसे पाइप करें (अनचाहे कोड, मेरे पास मेरी स्क्रिप्ट तक पहुंच नहीं है):

( tail -n +3 | logger -i -t mycronjob -s -p cron.crit ) <&6 &
exec 2>&6
cron_fsckin_job

3
2017-08-09 02:42



यदि आप मनुष्य sshd में देखते हैं, तो आप देखेंगे कि यह कहता है: लॉग इन प्रक्रिया जब कोई उपयोगकर्ता सफलतापूर्वक लॉग इन करता है, तो sshd निम्न करता है: 1. यदि लॉगिन tty पर है, और कोई आदेश निर्दिष्ट नहीं किया गया है, तो अंतिम लॉगिन समय प्रिंट करता है और / etc / motd (जब तक कि कॉन्फ़िगरेशन फ़ाइल में या ~ / .hushlogin द्वारा रोका नहीं जाता है; FILES अनुभाग देखें)। 2. ... ध्यान दें कि यदि ssh लॉगिन में कोई आदेश दर्ज किया गया है, तो कोई एमओटीडी प्रदर्शित नहीं होता है - katriel
मुझे पता है, यही वह है जो मैं दिखा रहा था। अापका नजरिया क्या है? - niXar


आपको इसे सर्वर पर करना है:

PrintMotd no
PrintLastLog no

डेबियन / ubtuntu पर pam_motd.so के साथ लाइन हैश:

#/etc/pam.d/ssh
# Print the message of the day upon successful login.
# session    optional     pam_motd.so

2
2017-07-06 18:10



नहीं तुम नहीं करते नीचे काइल ब्रांडे का जवाब देखें। - Stobor
-1 - उत्तर संपादित प्रश्न को प्रतिबिंबित नहीं करता है। अब प्रासंगिक नहीं है। - romandas