Solusi 1:
Saya tidak yakin mengapa Anda enggan melakukan ini dengan benar - baik di server ala
PrintMotd no
PrintLastLog no
dan
#/etc/pam.d/ssh
# Print the message of the day upon successful login.
# session optional pam_motd.so
Atau menambahkan ~/.hushlogin untuk setiap pengguna.
Petunjuk, untuk ~/.hushlogin, tambahkan ke /etc/skel sehingga direktori beranda pengguna baru dibuat dengan file tersebut.
Pembaruan:
Tanpa informasi lebih lanjut tentang pekerjaan cron cadangan Anda, satu-satunya saran saya adalah mengarahkan output dari perintah ke file (atau biarkan cron menangkapnya di email) dan output dari sesi ssh ke /dev/null. Sesuatu seperti:
0 0 * * * ssh backuphost "backup_script_that_writes_to_a_log" >/dev/null
Atau
0 0 * * * ssh backuphost "backup_command 2>&1" >/dev/null
Saya harus bermain-main dengan perintah sedikit, tetapi itu akan membantu Anda memulai.
Solusi 2:
Jika Anda menginginkan ini berdasarkan per pengguna, lakukan saja touch ~/.hushlogin
dan Anda siap dengan OpenSSH.
Perbarui :Seperti yang ditunjukkan di tempat lain, pam_motd
dapat dikonfigurasi untuk tidak menggunakan .hushlogin
per pengguna; centang /etc/login.defs
untuk HUSHLOGIN_FILE
. Ini dapat dikonfigurasi agar semua pengguna terdaftar di /etc/hushlogins
atau serupa.
Solusi 3:
@note Semua contoh menganggap Anda telah menetapkan variabel connectionString
dengan sesuatu seperti [email protected]
.
Bagaimana saya mendapatkan solusinya
Menggunakan ssh -T
harus bekerja untuk perintah sederhana. Misalnya ini tidak mencetak informasi tambahan apa pun:
ssh -T $connectionString "echo 'blah'"
Masalahnya adalah ketika Anda mencoba menggunakan here-doc untuk menjalankan banyak perintah. Misalnya - di bawah TIDAK akan berfungsi - ini akan menggemakan pesan hari ini (MoTD) dan juga mungkin menunjukkan kepada Anda "stdin:bukan tty".
somethingLocal='something local'
ssh -T $connectionString <<EOC
echo 'blah'
echo "blah $somethingLocal"
EOC
Untuk mengatasi masalah ini, Anda perlu terlebih dahulu menyimpan perintah ke variabel lokal dan mengirimkannya ke server jarak jauh.
somethingLocal='something local'
read -r -d '' commands <<EOC
echo 'blah'
echo "blah $somethingLocal"
EOC
ssh -T $connectionString "$commands"
Tapi itu berantakan...
Solusi terakhir
Buatlah fungsi universal (perhatikan bahwa ini dapat menggunakan string atau HEREDOC sebagai perintah).
function silentSsh {
local connectionString="$1"
local commands="$2"
if [ -z "$commands" ]; then
commands=`cat`
fi
ssh -T $connectionString "$commands"
}
Contoh
Gunakan ini seperti ini:
somethingLocal='something local'
silentSsh $connectionString <<EOC
echo 'blah'
echo "blah $somethingLocal"
EOC
Atau seperti itu:
silentSsh $connectionString "echo 'blah'"
Atau seperti itu:
silentSsh $connectionString <<'EOC'
echo 'blah'
somethingRemote=`echo 'whatever'`
echo "blah $somethingRemote"
EOC
Atau bahkan seperti itu:
silentSsh $connectionString < getlines.sh
Solusi 4:
Bagaimana dengan peretasan ini?;-P
ssh -t [email protected] '/bin/bash'
Berikut ini adalah tidak berlaku:
Meneruskan -T
ke ssh untuk menonaktifkan alokasi tty:
ssh -T machineName 'echo foo'
Solusi 5:
Sistem operasi apa ini? Pada beberapa sistem (seperti ubuntu) motd tidak dicetak oleh server ssh (PrintMotd di /etc/ssh/sshd_config), tetapi oleh pam dengan pam_motd. Jika demikian, Anda mungkin tidak dapat mengontrolnya dari klien.