Soluzione 1:
Non sono sicuro del motivo per cui hai un'avversione nel farlo correttamente, sia sul server che sulla
PrintMotd no
PrintLastLog no
e
#/etc/pam.d/ssh
# Print the message of the day upon successful login.
# session optional pam_motd.so
O aggiungendo ~/.hushlogin per ogni utente.
Suggerimento, per ~/.hushlogin, aggiungilo a /etc/skel in modo che le nuove home directory degli utenti vengano create con il file.
Aggiornamento:
Senza ulteriori informazioni sul tuo cron job di backup, il mio unico altro suggerimento è di reindirizzare l'output del comando su un file (o lasciare che cron lo acquisisca nella posta elettronica) e l'output della sessione ssh su /dev/null. Qualcosa come:
0 0 * * * ssh backuphost "backup_script_that_writes_to_a_log" >/dev/null
Oppure
0 0 * * * ssh backuphost "backup_command 2>&1" >/dev/null
Dovrei giocare un po' con i comandi, ma questo dovrebbe farti iniziare.
Soluzione 2:
Se lo desideri in base all'utente, fai semplicemente un touch ~/.hushlogin
e sei pronto con OpenSSH.
Aggiorna :Come sottolineato altrove, pam_motd
può essere configurato per non utilizzare un .hushlogin
per utente; seleziona /etc/login.defs
per HUSHLOGIN_FILE
. Può essere configurato per avere tutti gli utenti elencati in /etc/hushlogins
o simile.
Soluzione 3:
@note Tutti gli esempi presuppongono che tu abbia impostato una variabile connectionString
con qualcosa come [email protected]
.
Come sono arrivato alla soluzione
Usando ssh -T
dovrebbe funzionare per comandi semplici. Ad esempio, questo non stampa alcuna informazione aggiuntiva:
ssh -T $connectionString "echo 'blah'"
Il problema è quando si tenta di utilizzare here-doc per eseguire molti comandi. Ad esempio, il muggito NON funzionerà, farà eco al messaggio del giorno (MoTD) e potrebbe anche mostrarti "stdin:non è un tty".
somethingLocal='something local'
ssh -T $connectionString <<EOC
echo 'blah'
echo "blah $somethingLocal"
EOC
Per risolvere il problema devi prima salvare i comandi nella 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 è un casino...
Soluzione finale
Crea una funzione universale (nota che può prendere una stringa o HEREDOC come comandi).
function silentSsh {
local connectionString="$1"
local commands="$2"
if [ -z "$commands" ]; then
commands=`cat`
fi
ssh -T $connectionString "$commands"
}
Esempi
Usalo in questo modo:
somethingLocal='something local'
silentSsh $connectionString <<EOC
echo 'blah'
echo "blah $somethingLocal"
EOC
O così:
silentSsh $connectionString "echo 'blah'"
O così:
silentSsh $connectionString <<'EOC'
echo 'blah'
somethingRemote=`echo 'whatever'`
echo "blah $somethingRemote"
EOC
O anche così:
silentSsh $connectionString < getlines.sh
Soluzione 4:
Che ne dici di questo trucco?;-P
ssh -t [email protected] '/bin/bash'
Quanto segue è non valido:
Superare -T
a ssh per disabilitare l'allocazione tty:
ssh -T machineName 'echo foo'
Soluzione 5:
Che sistema operativo è questo? Su alcuni sistemi (come Ubuntu) il motd non viene stampato dal server ssh (PrintMotd in /etc/ssh/sshd_config), ma da pam con pam_motd. Se questo è il caso, probabilmente non puoi controllarlo dal client.