Arresti l'accesso ssh dalla printing del motd dal client?

Ho installato SSH passwordless, tuttavia printing il MoTD quando accede. C'è comunque per fermare ciò che accade dal lato client?

Ho provato ssh -q ma questo non funziona. Non voglio usare ~/.hushlogin né voglio cambiare il set di server. L'unica cosa che può funzionare è la quietizzazione di tutte le uscite, con >/dev/null 2>&1 . Tuttavia, non voglio ignorare gli errori nel caso in cui vi sia un problema. Anche facendo >/dev/null non funziona, poiché ssh sembra printingre la motd allo stderr.

Aggiornamento e ragionamento Sto eseguendo il backup in un cron. Non voglio ricevere una e-mail di cron, a less che non si sia verificato un errore. Tuttavia se il motd viene printingto, riceverò un'e-mail a tutti i tempi.

Voglio mantenere il motd printingto perché questo ha implicazioni giuridiche. Il motd dice "l'accesso non autorizzato è proibito". È necessario disporre di questo tipo di dichiarazione in modo da impedire legalmente le persone a accedervi (come un segno di non violazione). Quindi non voglio coperta disabilitare tutto il tempo.

  • Il modo migliore per montare un file system Linux su Windows su Internet?
  • il cygwin SSHD auto chiude la connessione alla connessione
  • Perché non è ansible accedere a un server Linux con errore di networking: la connessione è terminata
  • Mantenere un process di linux in esecuzione dopo l'output
  • come copiare i file su esxi datastore utilizzando scp?
  • Posso lasciare i collegamenti SSH dopo cinque secondi?
  • Ssh_exchange_identification intermittente: connessione chiusa da host remoto
  • Sostituzione per scponly su Debian
  • 14 Solutions collect form web for “Arresti l'accesso ssh dalla printing del motd dal client?”

    Non so perché tu abbia un'avversione a farlo correttamente – sul server a la

     PrintMotd no PrintLastLog no 

    e

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

    Oppure aggiungere ~ / .hushlogin per each utente.

    Suggerimento, per ~ / .hushlogin, aggiungerlo a / etc / skel in modo che nuove directory home utente creati con il file.

    Aggiornare:

    Senza ulteriori informazioni sul tuo lavoro di backup cron, il mio unico suggerimento è quello di redirect l'output del command in un file (o lasciare cron catturarlo in email) e l'output della session ssh in / dev / null. Qualcosa di simile a:

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

    O

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

    Devo giocare un po 'con i comandi, ma questo dovrebbe farti iniziare.

    Aggiorna dopo il commento di Marie:

    Che ne dici di questo hack? ;-P

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

    Il seguente non è valido: Passare -T a ssh per distriggersre l'allocazione di tty sembra fare il trucco (ma forse è necessario il tty). ssh -T machineName 'echo foo'

    Se vuoi questo su base utente, fai un touch ~/.hushlogin e sei totalmente impostato con OpenSSH.

    @note Tutti gli esempi presuppongono di aver impostato una connectionString variableString con qualcosa come connectionString=user@server .

    L'utilizzo di ssh -T dovrebbe funzionare per comandi semplici. Ad esempio, questo non printing qualsiasi informazione aggiuntiva:

     ssh -T $connectionString "echo 'blah'" 

    Il problema è quando si tenta di utilizzare qui-doc per eseguire molti comandi. Ad esempio – il muto non functionrà – esso eco messaggio del giorno (MoTD) e potrebbe anche mostrare "stdin: non è un tty".

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

    Per risolvere il problema, è necessario prima salvare i comandi alla variabile locale e inviarli al server remoto.

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

    Ma questo è disordinato …

    Soluzione finale

    Fare una function universale (nota che può richiedere una string o HEREDOC come comandi).

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

    Esempi

    Utilizza questo modo:

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

    Oppure come:

     silentSsh $connectionString "echo 'blah'" 

    Oppure come:

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

    Oppure come così:

     silentSsh $connectionString < getlines.sh 

    Quale sistema operativo è questo? Su alcuni sisthemes (come ubuntu) motd non viene printingto dal server ssh (PrintMotd in / etc / ssh / sshd_config), ma da pam con pam_motd. Se questo è il caso, probabilmente non è ansible controllarlo dal client.

    Devi farlo sul server:

     PrintMotd no PrintLastLog no 

    Su debian / ubtuntu anche hash la linea con pam_motd.so:

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

    Non eseguire il command ssh direttamente da cron.

    Effettuare invece uno script bash helper , eseguendo il process ssh e recuperando l'output, gli errori e il codice di errore se necessario; alla fine analizzarli per rimuovere le stringhe indesiderate dai messaggi di errore (il MoTD nel tuo caso) e quindi printingre nuovamente sull'output di script di bash e gli errori di stream di ciò che hai ottenuto in tal modo.

    Che mettere questo script bash in cron e vivere felici 🙂

    Nota: questa è una soluzione generale e deve lavorare qualunque sia il lavoro da eseguire tramite ssh. È solo il lato client, che dovrebbe soddisfare le vostre esigenze … l'unica dipendenza del client nella configuration del server è la conoscenza del messaggio esatto che si desidera tagliare dall'errore std o dal client ssh

    Solo un sidenote (sarebbe stato un commento, se posso postare quello): Il contenuto di motd è mostrato dopo un successo di accesso al sistema. Se desidero impedire legalmente l'accesso di una casella, preferisco farlo con un "banner" in sshd_config. I contenuti vengono visualizzati dopo l'inserimento di Username ma prima dell'authentication.

    O non hai provato quello che stai descrivendo, o i tuoi server sono configurati male!

    Ecco cosa ho provato solo su RHEL5:

     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 ~ $ 

    Non credo che tu sia necessario submit la dichiarazione di responsabilità a gusci non interattivi, vero? (Se qualcuno ti faccia, fai un favore, li calci nelle noci). Perché è esattamente perché c'è una distinzione tra le conchiglie interattive e quelle non interattive.

    Ma in each caso, ecco quello che faccio, perché non mi piace la posta da cron: passai l'output al logger. Basta passare attraverso la coda per rimuovere le prime (diciamo 3) righe del tuo disclaimer inutile come tali (codice non testato, non ho accesso ai miei script):

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

    Se ti capisco, hai bisogno di motd per altri motivi, ma non c'è bisogno di motd per il backup. Nella configuration di sshd non è ansible configurarlo solo per livello utente solo a livello globale. Pertanto, è necessario risolvere il motd supression nel lato client. Ma non c'è differenza tra il text di motd ei messaggi di errore del software di backup. Entrambe sono text nel terminal. L'unica soluzione che vedo per fare la differenza tra questo messaggio e poi filtrare la motd. Poiché i messaggi del software sono difficili da modificare, suggerisco di modificare il text di motd. Ad esempio mettere un fotogramma in giro:

     *** BEGIN message from the machine room *** motd message *** END message from the machine room *** 

    Poi dovresti filtrare il text tra il fotogramma e rilasciarlo.

    SOLUZIONE QUI:

    Nel caso in cui non si è responsabili del server e non è ansible modificare config motd o sshd, utilizzare il command come il seguente:

    Reindirizzare STDERR a STDOUT per i comandi remoti in modo che tu lo vedrai. E poi redirect STDERR di ssh a / dev / null. MOTD va a STERR e finisce in / dev / null. Verrà visualizzato un messaggio di errore standard AND dal command remoto (come va a STDOUT)

    Variante 1 – se ti interessa lo stato di output del command remoto eseguito:

    ssh remotehost "(remote_command1 && remote_command2; remote_command3) 2>&1" 2>/dev/null || echo SSH connection or remote command failed - either of them returned non-zero exit code $?

    Variante 2 – se si desidera ignorare il codice di output del command remoto – eseguire solo come ultimo command remoto

    ssh remotehost "(remote_command ; true ) 2>&1" 2>/dev/null || echo SSH connection failed

    Esempi di messaggi di errore:

    Esempio 1:

     ssh remotehost " failed_ remote_command 2> & 1" 2> / dev / null ||  echo la connessione SSH non rioutput o il command remoto restituito il codice di output non zero
     bash: failed_remote_command: command non trovato 
      La connessione SSH o il command remoto non sono riusciti - entrambi hanno restituito il codice di output non-zero 127
    

    Esempio 2:

     ssh remotehost " failed_ remote_command 2> & 1; true " 2> / dev / null ||  la connessione di echo non è rioutput
     bash: failed_remote_command: command non trovato
    

    Esempio 3a:

     ssh remotehost " failed_ remote_command 2> & 1; true" 2> / dev / null ||  la connessione di echo non è rioutput
     # nessun messaggio viene visualizzato
    

    Esempio 3b:

     ssh nonexistinghost " failed_ remote_command 2> & 1; true" 2> / dev / null ||  la connessione di echo non è rioutput
     La connessione SSH non è rioutput
    

    Hai provato a rimuovere il text nel file motd? Solo un pensiero.

     Hint: /etc/motd 

    Cosa stai cercando di fare e perché il MoTD vi disturba? Sto ipotizzando di eseguire un command remoto e di analizzare l'output? Se è così, questo potrebbe essere fatto in vari modi senza invocare una shell intertriggers (che provoca la visualizzazione del motd).

    Hai provato ad usare una configuration del sottosistema ssh? È ansible trovare un esempio all'indirizzo http://www.hell.org.ua/Docs/oreilly/tcpip2/ssh/ch05_07.htm che include anche il backup dei file.

    Suggerimenti per Linux e Windows Server, quali Ubuntu, Centos, Apache, Nginx, Debian e argomenti di rete.