Saya sudah menyiapkan SSH tanpa kata sandi, namun ia mencetak MoTD ketika login. Apakah ada cara untuk menghentikan hal itu terjadi dari sisi klien?
Saya sudah mencoba ssh -q
tetapi itu tidak berhasil. Saya tidak ingin menggunakan ~/.hushlogin
atau ingin mengubah pengaturan server. Satu-satunya hal yang dapat bekerja adalah untuk menenangkan semua output, dengan >/dev/null 2>&1
. Namun, saya tidak ingin mengabaikan kesalahan kalau-kalau ada masalah. Bahkan melakukan >/dev/null
tidak berhasil, karena ssh
sepertinya mencetak motd ke stderr.
Perbarui & alasan Saya menjalankan cadangan di cron. Saya tidak ingin mendapatkan email cron kecuali ada kesalahan. Namun jika motd dicetak saya akan mendapatkan email setiap saat.
Saya ingin menjaga motd dicetak karena itu memiliki implikasi hukum. Motd mengatakan "akses tidak terdaftar dilarang". Anda perlu memiliki pernyataan semacam ini di sana untuk secara hukum mencegah orang mengaksesnya (seperti tanda tidak masuk tanpa izin). Karenanya saya tidak ingin selimut menonaktifkannya sepanjang waktu.
/etc/profile.d
skrip yang mungkin berjalan di sana dan mencetak beberapa output ke konsol saat login.Jawaban:
Saya tidak yakin mengapa Anda tidak suka melakukan ini dengan benar - baik di server a la
dan
Atau menambahkan ~ / .hushlogin untuk setiap pengguna.
Petunjuk, untuk ~ / .hushlogin, tambahkan ke / etc / skel sehingga direktori home pengguna baru dibuat dengan file tersebut.
Memperbarui:
Tanpa informasi lebih lanjut tentang pekerjaan cron cadangan Anda, satu-satunya saran saya adalah mengarahkan kembali output perintah ke file (atau membiarkan cron menangkapnya dalam email) dan output dari sesi ssh ke / dev / null. Sesuatu seperti:
Atau
Saya harus bermain-main dengan perintah sedikit, tetapi itu harus Anda mulai.
sumber
.hushlogin
bagusJika Anda menginginkan ini berdasarkan per pengguna, lakukan saja
touch ~/.hushlogin
dan Anda sudah siap dengan OpenSSH.Pembaruan : Seperti yang ditunjukkan di tempat lain,
pam_motd
dapat dikonfigurasi untuk tidak menggunakan per-pengguna.hushlogin
; periksa/etc/login.defs
untukHUSHLOGIN_FILE
. Mungkin dikonfigurasikan agar semua pengguna terdaftar/etc/hushlogins
atau serupa.sumber
@catatan Semua contoh menganggap Anda telah menetapkan variabel
connectionString
dengan sesuatu seperticonnectionString=user@server
.Bagaimana saya dapat solusinya
Penggunaan
ssh -T
harus bekerja untuk perintah sederhana. Misalnya ini tidak mencetak informasi tambahan:Masalahnya adalah ketika Anda mencoba menggunakan di sini-doc untuk menjalankan banyak perintah. Sebagai contoh - di bawah ini TIDAK akan berfungsi - itu akan menggemakan pesan hari ini (MoTD) dan juga mungkin menunjukkan kepada Anda "stdin: is not a tty".
Untuk mengatasi masalah ini, Anda harus terlebih dahulu menyimpan perintah ke variabel lokal dan mengirimkannya ke server jauh.
Tapi itu berantakan ...
Solusi akhir
Buat fungsi universal (perhatikan bahwa ia dapat mengambil string atau HEREDOC sebagai perintah).
Contohnya
Gunakan ini seperti ini:
Atau seperti itu:
Atau seperti itu:
Atau bahkan seperti itu:
sumber
Bagaimana dengan retas ini? ;-P
Berikut ini tidak valid:
Beralih
-T
ke ssh untuk menonaktifkan alokasi tty:sumber
-t
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 ini masalahnya, Anda mungkin tidak dapat mengendalikannya dari klien.
sumber
Anda harus melakukannya di server:
Pada debian / ubtuntu juga hash baris dengan pam_motd.so:
sumber
Jangan jalankan perintah ssh secara langsung oleh cron.
Sebagai gantinya, buat skrip bash pembantu , jalankan pekerjaan ssh dan ambil output, kesalahan, dan kode kesalahan jika diperlukan; akhirnya mengurai mereka untuk menghapus string yang tidak diinginkan dari pesan kesalahan (MoTD dalam kasus Anda) dan kemudian mencetak kembali pada output skrip bash dan stream stream apa yang telah Anda peroleh sedemikian rupa.
Daripada menempatkan skrip bash ini di cron dan hidup bahagia :)
Catatan: Ini adalah solusi umum, dan harus bekerja apa pun pekerjaan yang harus Anda lakukan melalui ssh. Hanya sisi klien juga, yang harus memenuhi kebutuhan Anda ... satu-satunya ketergantungan klien pada konfigurasi server adalah pengetahuan tentang pesan yang tepat yang ingin Anda hilangkan dari std err atau di luar ssh client
sumber
Hanya sidenote (akan menjadi komentar, jika saya bisa memposting itu): Isi motd ditampilkan setelah berhasil login ke sistem. Jika saya ingin secara hukum mencegah orang mengakses kotak, saya lebih suka melakukannya dengan "Spanduk" di sshd_config. Konten ditampilkan setelah memasukkan Nama Pengguna tetapi sebelum diautentikasi.
sumber
Entah Anda belum mencoba apa yang Anda gambarkan, atau server Anda salah dikonfigurasi!
Inilah yang saya coba di RHEL5:
Saya kira Anda tidak perlu penafian untuk dikirim ke cangkang non-interaktif, bukan? (Jika ada yang mengklaim Anda melakukannya, bantu saya, tendang mereka.) Karena itulah mengapa ada perbedaan antara cangkang interaktif dan yang tidak interaktif.
Tapi bagaimanapun, inilah yang saya lakukan karena saya tidak suka mail dari cron: Saya menyalurkan output ke logger. Cukup pipirkan melalui ekor untuk menghapus beberapa baris pertama (misalkan 3) dari disclaimer Anda yang tidak berguna seperti itu (kode yang belum diuji, saya tidak memiliki akses ke skrip saya):
sumber
Jika saya mengerti Anda, Anda perlu motd untuk alasan lain tetapi tidak perlu motd untuk cadangan. Dalam konfigurasi sshd tidak dapat mengaturnya hanya berdasarkan pengguna secara global. Oleh karena itu Anda perlu menyelesaikan penekanan berat di sisi klien. Tetapi tidak ada perbedaan antara teks motd dan pesan kesalahan perangkat lunak cadangan. Keduanya adalah teks di terminal. Satu-satunya solusi yang saya lihat untuk membuat perbedaan antara dua pesan ini kemudian menyaring satu motd. Karena pesan perangkat lunak sulit diubah, saya sarankan untuk memodifikasi teks motd. Misalnya menaruh bingkai di sekitar:
Maka Anda harus menyaring teks di antara bingkai dan menjatuhkannya.
sumber
SOLUSI DI SINI:
Jika Anda tidak bertanggung jawab atas server dan Anda tidak dapat mengubah konfigurasi motd atau sshd, gunakan perintah seperti berikut:
Redirect STDERR ke STDOUT untuk perintah jarak jauh sehingga Anda akan melihatnya. Dan kemudian mengarahkan STDERR dari ssh ke / dev / null. MOTD pergi ke STERR dan berakhir di / dev / null. Pesan standar DAN kesalahan dari perintah jarak jauh akan ditampilkan (seperti yang terjadi pada STDOUT)
Varian 1 - jika Anda peduli tentang status keluar dari perintah yang dijalankan dari jarak jauh:
ssh remotehost "(remote_command1 && remote_command2; remote_command3) 2>&1" 2>/dev/null || echo SSH connection or remote command failed - either of them returned non-zero exit code $?
Varian 2 - jika Anda ingin mengabaikan kode keluar dari perintah jarak jauh - jalankan benar sebagai perintah jarak jauh terakhir
ssh remotehost "(remote_command; true) 2>&1" 2>/dev/null || echo SSH connection failed
Contoh pesan kesalahan:
Contoh 1:
Contoh 2:
Contoh 3a:
Contoh 3b:
sumber
Sudahkah Anda mencoba menghapus teks dalam file motd? Hanya pemikiran saja.
sumber
Apa yang Anda coba lakukan dan mengapa MoTD mengganggu Anda? Saya menduga menjalankan perintah jarak jauh dan mem-parsing output? Jika demikian, ini dapat dilakukan dengan berbagai cara tanpa menggunakan shell interaktif (yang menyebabkan motd ditampilkan).
sumber
Sudahkah Anda mencoba menggunakan konfigurasi subsistem ssh? Anda dapat menemukan contoh di http://www.hell.org.ua/Docs/oreilly/tcpip2/ssh/ch05_07.htm yang bahkan termasuk mencadangkan file.
sumber