SSH MOTD ต่อผู้ใช้


17

ฉันต้องการแสดงแบนเนอร์ (ข้อความต้อนรับ) สำหรับผู้ใช้ SSH ที่มีข้อความต้อนรับเฉพาะสำหรับผู้ใช้แต่ละคน

คำตอบ:


38

คุณไม่ได้ระบุสิ่งที่คุณใช้เซิร์ฟเวอร์ SSH ฉันสมมติว่า OpenSSH

โปรดทราบว่าแบนเนอร์ SSH และ MOTD เป็นสองสิ่งที่แตกต่างกัน

ในขณะที่เกือบจะแยกไม่ออกในเทอร์มินัล SSH พวกเขามีพฤติกรรมที่แตกต่างเช่นในไคลเอนต์ SFTP


MOTD เป็นเพียงข้อความที่พิมพ์บนเทอร์มินัลแบบโต้ตอบ ดังนั้นมันจะไม่ (และไม่สามารถ) ถูกส่งไปยังไคลเอนต์ SFTP เช่น (เพิ่มเติมเกี่ยวกับเรื่องนั้นในภายหลัง)

MOTD นั้นได้รับการเข้ารหัสไว้อย่างหนัก/etc/motdใน OpenSSH คุณสามารถเปิด / ปิดได้ทั่วโลกเท่านั้นโดยใช้PrintMotdคำสั่ง

อย่างไรก็ตามในบางระบบ Linux PrintMotdนั้นจะปิดอยู่เสมอและ MOTD จะถูกพิมพ์โดย PAM stack แทน (ใช้pam_motdโมดูล) ในกรณีนี้คุณสามารถปิดได้ผ่านทาง/etc/pam.d/sshdหรือระบุmotd=เส้นทางที่กำหนดเองเป็นพารามิเตอร์โมดูล


แบนเนอร์ SSH เป็นคุณสมบัติพิเศษ SSH 2.0 ส่งในแพ็คเก็ต SSH เฉพาะ (SSH2_MSG_USERAUTH_BANNER)

ดังนั้นแม้แต่ไคลเอ็นต์ที่ไม่ใช่เทอร์มินัลเช่นไคลเอนต์ SFTP สามารถประมวลผลและแสดงต่อผู้ใช้ ดูว่าแบนเนอร์แสดงในไคลเอนต์ WinSCP SFTP / SCPได้อย่างไร

แบนเนอร์ SSH สามารถกำหนดค่าได้ต่อผู้ใช้ (หรือกลุ่มหรือเกณฑ์อื่น ๆ ) ในการsshd_configใช้BannerและMatchคำสั่ง :

Match User username1
    Banner /etc/banner_user1

Match User username2
    Banner /etc/banner_user2

ดูเพิ่มเติมที่ปิดใช้งานแบนเนอร์ ssh สำหรับผู้ใช้หรือ ipsเฉพาะ


แน่นอนคุณยังสามารถใช้การใช้งานที่กำหนดเองสำหรับข้อความ / แบนเนอร์ เพียงพิมพ์ข้อความที่เลือกโดยใช้ตรรกะที่คุณกำหนดเองจากสคริปต์โปรไฟล์ส่วนกลาง

เช่นเดียวกับ MOTD สิ่งนี้จะไม่ทำงานสำหรับเซสชันที่ไม่มีการโต้ตอบ (SFTP และอื่น ๆ )

ที่สำคัญไม่เพียง แต่จะไม่ทำงานเท่านั้นคุณต้องตรวจสอบให้แน่ใจว่าคุณพิมพ์ข้อความสำหรับเทอร์มินัลเชิงโต้ตอบเท่านั้น อะไร OpenSSH /etc/motdไม่โดยอัตโนมัติ ใช้สคริปต์ส่วนกลางโปรไฟล์ที่ดำเนินการสำหรับเทอร์มินัลเชิงโต้ตอบเท่านั้นหรือพิมพ์ข้อความตามเงื่อนไขโดยขึ้นอยู่กับค่าของTERMตัวแปรสภาพแวดล้อม

ถ้าคุณพิมพ์ข้อความสำหรับเซสชันที่ไม่มีการโต้ตอบคุณทำลายไคลเอนต์ใด ๆ ที่ใช้โปรโตคอลที่เข้มงวดเช่น SFTP หรือ SCP เนื่องจากไคลเอ็นต์จะพยายามตีความข้อความของคุณว่าเป็นข้อความโปรโตคอลล้มเหลวอย่างรุนแรง

ดูตัวอย่างรายละเอียดของปัญหาดังกล่าวในเอกสารของลูกค้า WinSCP SFTP / SCP

(ฉันเป็นผู้เขียน WinSCP)


สวัสดีทุกคนขอบคุณสำหรับการตอบกลับฉันได้รับการแก้ไขโปรดแก้ไขฉันถ้าฉันผิด ฉันต่อท้ายบรรทัดนี้ลงในไฟล์ / etc / profile PGROUP = groups|awk '{print $1}'cat /etc/motd.${PGROUP} ก่อนที่จะเพิ่มบรรทัดนี้ฉันสร้างไฟล์แบนเนอร์สำหรับผู้ใช้แต่ละคนภายใต้ไดเรกทอรี / etc และไฟล์เช่น motd.root และ motd.alex และงานนี้สำหรับฉัน
user260277

ที่ควรทำเช่นกัน ยกเว้นตามคำตอบของฉันสิ่งนี้ใช้ได้ในเทอร์มินัลเชิงโต้ตอบเท่านั้น มันจะไม่ทำงานสำหรับ SFTP และที่คล้ายกัน
Martin Prikryl

ขั้วโต้ตอบหมายถึงอะไร
user260277

เป็นเทอร์มินัลที่มนุษย์โต้ตอบด้วย (ตรงข้ามกับเซสชัน SFTP, เซสชัน SCP หรือเทอร์มินัลที่ไม่ใช่แบบโต้ตอบที่ใช้สำหรับการทำงานแบบแบตช์จากระยะไกล)
Martin Prikryl

ฉันได้รวมรายละเอียดที่ซับซ้อนบางอย่างเกี่ยวกับการติดตั้งแบนเนอร์แบบกำหนดเอง
Martin Prikryl

9

คุณสามารถใช้"$HOME/.ssh/rc"ไฟล์ได้เช่นกันเพื่อเก็บถาวรสิ่งที่คุณต้องการทำ

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

ดังนั้นคุณสามารถมีหนึ่ง ssh rc สำหรับผู้ใช้ทุกคน


สวัสดีฉันลอง แต่จะให้ข้อความแสดงข้อผิดพลาด. ssh / rc: 1: .ssh / rc: ยินดีต้อนรับ: ไม่พบ
user260277

เป็นความผิดของฉันฉันพิมพ์ผิดคุณต้องการเสียงก้องเหมือนในสคริปต์ทุบตีปกติ
c4f4t0r

"Wolrd" ยังพิมพ์ผิด :)
simon

ฉันได้รับ "stty: อินพุตมาตรฐาน: ioctl ที่เหมาะสมสำหรับอุปกรณ์"
หยุดชั่วคราวจนกว่าจะมีการแจ้งให้ทราบต่อไป

คุณมีอะไรใน. ssh / rc
c4f4t0r
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.