Solución 1:
No estoy seguro de por qué tiene aversión a hacer esto correctamente, ya sea en el servidor a la
PrintMotd no
PrintLastLog no
y
#/etc/pam.d/ssh
# Print the message of the day upon successful login.
# session optional pam_motd.so
O agregar ~/.hushlogin para cada usuario.
Sugerencia, para ~/.hushlogin, agréguelo a /etc/skel para que se creen nuevos directorios de inicio de usuario con el archivo.
Actualización:
Sin más información sobre su trabajo cron de copia de seguridad, mi única otra sugerencia es redirigir la salida del comando a un archivo (o dejar que cron la capture en un correo electrónico) y la salida de la sesión ssh a /dev/null. Algo como:
0 0 * * * ssh backuphost "backup_script_that_writes_to_a_log" >/dev/null
O
0 0 * * * ssh backuphost "backup_command 2>&1" >/dev/null
Tendría que jugar un poco con los comandos, pero eso debería ayudarte a empezar.
Solución 2:
Si desea esto por usuario, simplemente haga un touch ~/.hushlogin
y ya está todo listo con OpenSSH.
Actualizar :Como se señaló en otra parte, pam_motd
puede configurarse para no usar un .hushlogin
por usuario; comprobar /etc/login.defs
para HUSHLOGIN_FILE
. Puede configurarse para que todos los usuarios aparezcan en /etc/hushlogins
o similar.
Solución 3:
@note Todos los ejemplos asumen que ha establecido una variable connectionString
con algo como [email protected]
.
Cómo llegué a la solución
Usando ssh -T
debería funcionar para comandos simples. Por ejemplo, esto no imprime ninguna información adicional:
ssh -T $connectionString "echo 'blah'"
El problema es cuando intenta usar here-doc para ejecutar muchos comandos. Por ejemplo, a continuación NO funcionará, hará eco del mensaje del día (MoTD) y también podría mostrarle "stdin:is not a tty".
somethingLocal='something local'
ssh -T $connectionString <<EOC
echo 'blah'
echo "blah $somethingLocal"
EOC
Para solucionar el problema, primero debe guardar los comandos en la variable local y luego enviarlos al servidor remoto.
somethingLocal='something local'
read -r -d '' commands <<EOC
echo 'blah'
echo "blah $somethingLocal"
EOC
ssh -T $connectionString "$commands"
Pero eso es complicado...
Solución definitiva
Cree una función universal (tenga en cuenta que puede tomar una cadena o HEREDOC como comandos).
function silentSsh {
local connectionString="$1"
local commands="$2"
if [ -z "$commands" ]; then
commands=`cat`
fi
ssh -T $connectionString "$commands"
}
Ejemplos
Usa esto así:
somethingLocal='something local'
silentSsh $connectionString <<EOC
echo 'blah'
echo "blah $somethingLocal"
EOC
O así:
silentSsh $connectionString "echo 'blah'"
O así:
silentSsh $connectionString <<'EOC'
echo 'blah'
somethingRemote=`echo 'whatever'`
echo "blah $somethingRemote"
EOC
O incluso así:
silentSsh $connectionString < getlines.sh
Solución 4:
¿Qué tal este truco?;-P
ssh -t [email protected] '/bin/bash'
Lo siguiente no válido:
Pasando -T
a ssh para deshabilitar la asignación de tty:
ssh -T machineName 'echo foo'
Solución 5:
¿Qué sistema operativo es este? En algunos sistemas (como ubuntu), el motd no lo imprime el servidor ssh (PrintMotd en /etc/ssh/sshd_config), sino pam con pam_motd. Si este es el caso, probablemente no puedas controlarlo desde el cliente.