Řešení 1:
Nejsem si jistý, proč máte odpor k tomu, abyste to udělali správně - buď na serveru a la
PrintMotd no
PrintLastLog no
a
#/etc/pam.d/ssh
# Print the message of the day upon successful login.
# session optional pam_motd.so
Nebo přidání ~/.hushlogin pro každého uživatele.
Tip, pro ~/.hushlogin jej přidejte do /etc/skel, aby se se souborem vytvořily nové domovské adresáře uživatelů.
Aktualizace:
Bez dalších informací o vaší úloze zálohování cron, můj jediný další návrh je přesměrovat výstup příkazu do souboru (nebo nechat cron zachytit jej v e-mailu) a výstup ssh relace do /dev/null. Něco jako:
0 0 * * * ssh backuphost "backup_script_that_writes_to_a_log" >/dev/null
Nebo
0 0 * * * ssh backuphost "backup_command 2>&1" >/dev/null
Musel bych si trochu pohrát s příkazy, ale tím byste měli začít.
Řešení 2:
Pokud to chcete na úrovni jednotlivých uživatelů, stačí provést touch ~/.hushlogin
a vše je nastaveno pomocí OpenSSH.
Aktualizovat :Jak je uvedeno jinde, pam_motd
může být nakonfigurováno tak, aby nepoužívalo .hushlogin
pro uživatele; zaškrtněte /etc/login.defs
pro HUSHLOGIN_FILE
. Může být nakonfigurován tak, aby měl všechny uživatele uvedené v /etc/hushlogins
nebo podobně.
Řešení 3:
@note Všechny příklady předpokládají, že jste nastavili proměnnou connectionString
s něčím jako [email protected]
.
Jak jsem se k řešení dostal
Pomocí ssh -T
by měl fungovat pro jednoduché příkazy. Toto například nevytiskne žádné další informace:
ssh -T $connectionString "echo 'blah'"
Problém je, když se pokusíte použít here-doc ke spuštění mnoha příkazů. Například – níže uvedené NEBUDE fungovat – bude to echo zpráva dne (MoTD) a také vám může ukázat „stdin:is not a tty“.
somethingLocal='something local'
ssh -T $connectionString <<EOC
echo 'blah'
echo "blah $somethingLocal"
EOC
Chcete-li problém vyřešit, musíte nejprve uložit příkazy do místní proměnné a odeslat je na vzdálený server.
somethingLocal='something local'
read -r -d '' commands <<EOC
echo 'blah'
echo "blah $somethingLocal"
EOC
ssh -T $connectionString "$commands"
Ale to je špinavé...
Konečné řešení
Vytvořte univerzální funkci (všimněte si, že může mít jako příkazy řetězec nebo HEREDOC).
function silentSsh {
local connectionString="$1"
local commands="$2"
if [ -z "$commands" ]; then
commands=`cat`
fi
ssh -T $connectionString "$commands"
}
Příklady
Použijte to takto:
somethingLocal='something local'
silentSsh $connectionString <<EOC
echo 'blah'
echo "blah $somethingLocal"
EOC
Nebo takhle:
silentSsh $connectionString "echo 'blah'"
Nebo takhle:
silentSsh $connectionString <<'EOC'
echo 'blah'
somethingRemote=`echo 'whatever'`
echo "blah $somethingRemote"
EOC
Nebo dokonce tak:
silentSsh $connectionString < getlines.sh
Řešení 4:
Co říkáte na tento hack?;-P
ssh -t [email protected] '/bin/bash'
Následující text není platné:
Předání -T
pro ssh pro zakázání alokace tty:
ssh -T machineName 'echo foo'
Řešení 5:
Co je to za operační systém? Na některých systémech (jako ubuntu) motd netiskne ssh server (PrintMotd v /etc/ssh/sshd_config), ale pam s pam_motd. Pokud je to tento případ, pak to pravděpodobně nemůžete ovládat z klienta.