เรียกใช้สคริปต์โดยอัตโนมัติในเซิร์ฟเวอร์หลังจากการเชื่อมต่อ ssh


11

วิธีการเรียกใช้สคริปต์โดยอัตโนมัติในเซิร์ฟเวอร์หลังจากระบบไคลเอนต์สร้างการเชื่อมต่อ ssh กับเซิร์ฟเวอร์

ตัวอย่างเช่นสมมติว่าผู้ใช้จะเข้าสู่ระบบคอมพิวเตอร์ของฉันจากระบบอื่น (เชื่อมต่อผ่าน LAN) โดยใช้การเชื่อมต่อ ssh ในเวลานั้นสคริปต์ (python หรือ shell) ควรรันโดยอัตโนมัติในระบบของฉันเพื่อทำการตรวจสอบความถูกต้อง?

วิธีการเรียกใช้สคริปต์โดยอัตโนมัติในระบบเซิร์ฟเวอร์


คำตอบ:


14

คุณสามารถทำได้โดยการเพิ่มพารามิเตอร์ต่อไปนี้ลงในไฟล์ปรับแต่งของคุณ (/ etc / ssh / sshd_config)

 ForceCommand
         Forces the execution of the command specified by ForceCommand, ignoring any command supplied by the client and ~/.ssh/rc if present.  The command is invoked by using the user's login shell
         with the -c option.  This applies to shell, command, or subsystem execution.  It is most useful inside a Match block.  The command originally supplied by the client is available in the
         SSH_ORIGINAL_COMMAND environment variable.  Specifying a command of “internal-sftp” will force the use of an in-process sftp server that requires no support files when used with
         ChrootDirectory.

ตัวเลือกอื่นคือการใช้ไฟล์. ssh / rc บนพื้นฐานของผู้ใช้แต่ละคน

หากต้องการใช้วิธี ForceCommand คุณเพียงเพิ่มForceCommand /usr/bin/ownscriptที่ด้านล่างของไฟล์/etc/ssh/sshd_config(บนเซิร์ฟเวอร์)

สคริปต์มีลักษณะดังนี้:

#!/bin/bash
#Script file for ssh
#
#put your commands here
echo "test" > /tmp/test.txt
#
#exit by calling a shell to open for the ssh session
/bin/bash

อย่าลืมที่จะ chmod สคริปต์ sudo chmod +x /usr/bin/ownscript


ขอบคุณสำหรับคำตอบ. คุณช่วยกรุณาให้คำสั่งตัวอย่าง
คนที่กระตือรือร้น

แต่คำสั่งบังคับว่าจะรันคำสั่งในเซิร์ฟเวอร์ (ล็อกอินของผู้ดูแลระบบ) หรือในการล็อกอินของไคลเอ็นต์หรือไม่ ฉันต้องการที่จะดำเนินการคำสั่งในการเข้าสู่ระบบเซิร์ฟเวอร์
คนที่กระตือรือร้น

1
คำสั่งถูกใช้บนเซิร์ฟเวอร์ เพียงแค่เพิ่ม ForceCommand /path/command.script ที่ด้านล่างของการกำหนดค่าของคุณจะทำเคล็ดลับ อย่างไรก็ตามฉันพบว่ามันจะรันคำสั่งนี้ดังนั้นคุณต้องเริ่มเชลล์ใน scriptfile ของคุณ เพื่อการอ่านที่ดีขึ้นฉันจะเพิ่มตัวอย่างในคำตอบเดิมของฉัน
ขอ

ขอขอบคุณ. ฉันสามารถรันสคริปต์ python แทน shell script ได้อย่างไร
คนที่กระตือรือร้น

สมมติว่าฉันรันคำสั่งที่กำหนดเองของฉันมีวิธีใดที่จะดึงที่อยู่ IP และชื่อเข้าสู่ระบบของผู้ใช้ (ฉันต้องการที่จะรู้ว่าเพราะคำสั่งของฉันเข้าสู่ระบบที่ได้ดำเนินการหรือไม่
คนที่กระตือรือร้น

4

คุณสามารถสร้าง/etc/ssh/sshrcไฟล์ man 8 sshดู ~/.ssh/rcหากคุณต้องการนี้สำหรับผู้ใช้คนเดียวใช้

นี่คือตัวอย่าง/etc/ssh/sshrcที่จะแจ้งให้คุณทราบผ่าน dbus เมื่อมีคนลงชื่อเข้าใช้ในเครื่องของคุณ อย่าลืมchmod +x:

#!/bin/bash

ip=`echo $SSH_CONNECTION | cut -d " " -f 1`

notify-send -u CRITICAL "SSH connection from ${ip}" "User $USER just logged in from $ip"

1

สำหรับการดำเนินการของสคริปต์ระหว่างการเข้าสู่ระบบให้เพิ่มเป็นการเรียกจากภายในสคริปต์ / etc / profile สิ่งนี้จะถูกดำเนินการสำหรับการเข้าสู่ระบบทุกครั้งไม่เพียง แต่สำหรับการเข้าสู่ระบบ ssh


ฉันกังวลเกี่ยวกับระบบไคลเอนต์เท่านั้นที่เชื่อมต่อโดยใช้การเชื่อมต่อ ssh
คนที่กระตือรือร้น

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