Solution 1 :
Je ne sais pas pourquoi vous avez une aversion pour le faire correctement - soit sur le serveur à la
PrintMotd no
PrintLastLog no
et
#/etc/pam.d/ssh
# Print the message of the day upon successful login.
# session optional pam_motd.so
Ou en ajoutant ~/.hushlogin pour chaque utilisateur.
Astuce, pour ~/.hushlogin, ajoutez-le à /etc/skel afin que les nouveaux répertoires personnels des utilisateurs soient créés avec le fichier.
Mise à jour :
Sans plus d'informations sur votre tâche cron de sauvegarde, ma seule autre suggestion est de rediriger la sortie de la commande vers un fichier (ou de laisser cron la capturer dans un e-mail) et la sortie de la session ssh vers /dev/null. Quelque chose comme :
0 0 * * * ssh backuphost "backup_script_that_writes_to_a_log" >/dev/null
Ou
0 0 * * * ssh backuphost "backup_command 2>&1" >/dev/null
Je devrais jouer un peu avec les commandes, mais cela devrait vous aider à démarrer.
Solution 2 :
Si vous voulez cela par utilisateur, faites simplement un touch ~/.hushlogin
et vous êtes prêt avec OpenSSH.
Mettre à jour :Comme indiqué ailleurs, pam_motd
peut être configuré pour ne pas utiliser de .hushlogin
par utilisateur; vérifier /etc/login.defs
pour HUSHLOGIN_FILE
. Il peut être configuré pour que tous les utilisateurs soient répertoriés dans /etc/hushlogins
ou similaire.
Solution 3 :
@note Tous les exemples supposent que vous avez défini une variable connectionString
avec quelque chose comme [email protected]
.
Comment j'ai trouvé la solution
Utilisation de ssh -T
devrait fonctionner pour des commandes simples. Par exemple, cela n'imprime aucune information supplémentaire :
ssh -T $connectionString "echo 'blah'"
Le problème survient lorsque vous essayez d'utiliser here-doc pour exécuter de nombreuses commandes. Par exemple - ci-dessous ne fonctionnera PAS - il fera écho au message du jour (MoTD) et pourrait également vous montrer "stdin :n'est pas un tty".
somethingLocal='something local'
ssh -T $connectionString <<EOC
echo 'blah'
echo "blah $somethingLocal"
EOC
Pour contourner le problème, vous devez d'abord enregistrer les commandes dans une variable locale et les envoyer au serveur distant.
somethingLocal='something local'
read -r -d '' commands <<EOC
echo 'blah'
echo "blah $somethingLocal"
EOC
ssh -T $connectionString "$commands"
Mais c'est compliqué...
Solution finale
Créez une fonction universelle (notez qu'elle peut prendre une chaîne ou HEREDOC comme commandes).
function silentSsh {
local connectionString="$1"
local commands="$2"
if [ -z "$commands" ]; then
commands=`cat`
fi
ssh -T $connectionString "$commands"
}
Exemples
Utilisez ceci comme ceci :
somethingLocal='something local'
silentSsh $connectionString <<EOC
echo 'blah'
echo "blah $somethingLocal"
EOC
Ou comme ceci :
silentSsh $connectionString "echo 'blah'"
Ou comme ceci :
silentSsh $connectionString <<'EOC'
echo 'blah'
somethingRemote=`echo 'whatever'`
echo "blah $somethingRemote"
EOC
Ou même comme ça :
silentSsh $connectionString < getlines.sh
Solution 4 :
Que diriez-vous de ce hack?;-P
ssh -t [email protected] '/bin/bash'
Ce qui suit n'est pas valide :
Passer -T
à ssh pour désactiver l'allocation tty :
ssh -T machineName 'echo foo'
Solution 5 :
De quel système d'exploitation s'agit-il ? Sur certains systèmes (comme ubuntu), le motd n'est pas imprimé par le serveur ssh (PrintMotd dans /etc/ssh/sshd_config), mais par pam avec pam_motd. Si tel est le cas, vous ne pourrez probablement pas le contrôler depuis le client.