SSH MOTD per pengguna

17

Saya ingin menampilkan spanduk (pesan selamat datang) untuk pengguna SSH dengan pesan selamat datang khusus untuk setiap pengguna.

pengguna260277
sumber

Jawaban:

38

Anda tidak menentukan, server SSH apa yang Anda gunakan. Saya mengasumsikan OpenSSH.

Perhatikan bahwa spanduk SSH dan MOTD adalah dua hal yang berbeda.

Walaupun hampir tidak dapat dibedakan dalam terminal SSH, mereka memiliki perilaku yang berbeda, misalnya, dalam klien SFTP.


MOTD hanyalah teks yang dicetak pada terminal interaktif. Jadi, itu tidak akan (dan tidak bisa) dikirim ke klien SFTP, misalnya (lebih lanjut tentang itu nanti).

MOTD dikodekan dengan keras /etc/motdpada OpenSSH. Anda dapat menyalakan / mematikannya hanya secara global, menggunakan PrintMotdarahan.

Pada beberapa sistem Linux, PrintMotdselalu mati dan MOTD dicetak oleh tumpukan PAM sebagai gantinya (menggunakan pam_motdmodul). Dalam hal ini, Anda dapat mematikannya melalui /etc/pam.d/sshdatau menentukan motd=jalur khusus sebagai parameter modul.


Spanduk SSH adalah fitur SSH 2.0 khusus, yang dikirim dalam paket SSH tertentu (SSH2_MSG_USERAUTH_BANNER).

Dengan demikian, bahkan klien non-terminal, seperti klien SFTP, dapat memprosesnya dan ditampilkan kepada pengguna. Lihat bagaimana spanduk ditampilkan di klien WinSCP SFTP / SCP .

Spanduk SSH dapat dikonfigurasi per pengguna (atau grup atau kriteria lainnya) dalam sshd_configmenggunakan Bannerdan Matcharahan :

Match User username1
    Banner /etc/banner_user1

Match User username2
    Banner /etc/banner_user2

Lihat juga Nonaktifkan ssh banner untuk pengguna atau ips tertentu .


Tentu saja, Anda juga dapat menggunakan implementasi khusus untuk pesan / spanduk. Cukup cetak pesan yang dipilih menggunakan logika khusus Anda dari skrip profil global.

Seperti halnya MOTD, ini tidak akan berfungsi untuk sesi non-interaktif (SFTP dan sejenisnya).

Lebih penting lagi, tidak hanya itu tidak akan berfungsi, Anda perlu memastikan bahwa Anda mencetak pesan hanya untuk terminal interaktif. Apa yang dilakukan OpenSSH secara otomatis untuk /etc/motd. Baik menggunakan skrip profil global yang dijalankan hanya untuk terminal interaktif, atau cetak pesan secara kondisional berdasarkan nilai TERMvariabel lingkungan.

Jika Anda mencetak pesan untuk sesi non-interaktif, Anda memutuskan klien mana pun yang menggunakan protokol ketat, seperti SFTP atau SCP, karena klien akan mencoba menafsirkan pesan teks Anda sebagai pesan protokol, gagal parah.

Lihat misalnya deskripsi masalah seperti itu dalam dokumentasi klien WinSCP SFTP / SCP .

(Saya penulis WinSCP)

Martin Prikryl
sumber
Hai semua terima kasih atas balasan, saya mendapatkan solusinya tolong perbaiki saya jika saya salah. Saya menambahkan baris ini ke file / etc / profile. PGROUP = groups|awk '{print $1}'cat /etc/motd.${PGROUP} sebelum menambahkan baris ini saya membuat file banner untuk setiap pengguna di bawah direktori / etc. dan file seperti motd.root dan motd.alex dan ini berfungsi untuk saya.
user260277
Itu juga harus dilakukan. Kecuali sesuai jawaban saya, ini hanya berfungsi di terminal interaktif. Ini tidak akan berfungsi untuk SFTP dan sejenisnya.
Martin Prikryl
sarana terminal interaktif?
user260277
Ini adalah terminal yang berinteraksi dengan manusia (berbeda dengan sesi SFTP, sesi SCP, atau terminal non-interaktif yang digunakan untuk eksekusi jarak jauh dari beberapa tugas batch)
Martin Prikryl
Saya telah menyertakan beberapa detail rumit tentang penerapan kustom spanduk.
Martin Prikryl
9

Anda dapat menggunakan "$HOME/.ssh/rc"file juga untuk mengarsipkan apa yang ingin Anda lakukan

echo "echo Hello World" > /home/pluto/.ssh/rc
ssh pluto@localhost
Last login: Thu Dec 18 08:46:16 2014 from localhost.localdomain
Hello World

Jadi, Anda dapat memiliki satu ssh rc untuk setiap pengguna.

c4f4t0r
sumber
hai, saya coba ini tetapi memberikan pesan kesalahan .ssh / rc: 1: .ssh / rc: welcom: tidak ditemukan.
user260277
adalah kesalahan saya, saya melakukan kesalahan ketik, Anda perlu gema seperti dalam skrip bash normal
c4f4t0r
"Wolrd" juga salah ketik :)
simon
Saya mendapatkan "stty: input standar: ioctl tidak sesuai untuk perangkat".
Dijeda sampai pemberitahuan lebih lanjut.
apa yang ada di .ssh / rc?
c4f4t0r