[MEGOLDVA] Napi üzenet Debianon

Fórumok

Üdvözlet!

Egy érdekes kérdéssel/kéréssel fordulok most a nagyérdeműhöz.
Ugyebár mikor bejelentkezünk egy Ubuntu alapú szerverre SSH-n keresztül akkor egy rakat hasznos információt ír ki nekünk a szerver (MOTD, message of the day). Ez nagyon hasznos tud lenni.

Én ugyan ezt szeretném kiíratni Debian 7 alatt is hogyha bejelentkezek távolról (az alap szöveg ugyanis nem éppen informatív csupán a verzió és az utolsó bejelentkezés időpontja).

Ubuntuban elég bonyolultan oldják meg a dolgot, remélem Debianon van valamilyen egyszerűbb megoldás is (amolyan egyszerű tárolóból, vagy csomagból telepíthető kis huncutság) :)
Körülbelül azt szeretném elérni hogy azt, írja ki amit Ubuntun is kiír...
http://kepfeltoltes.hu/140102/ubuntu_www.kepfeltoltes.hu_.png

(előre is) hálás köszönet!

Ui: kézzel meglehetne oldani hogy minden induláskor beírjon valamit a /etc/motd fájlba, de nekem dinamikusan frissülő infók kellenének.

Hozzászólások

Saját script meghívása a .profile vagy .bash_profile-ból?

Ezekete végülis nem induláskor írja ki hanem bejelentkezéskor, ha meg már valaki betudott a nevemben jelentkezni akkor meg már mind1, nincs biztonság.

----

Kipróbáltam azt amit linkeltél, viszonylag elfogadható megoldás de valahogy még mindig nem az ami nekem kéne

+++++++++++++++++: System Data :+++++++++++++++++++
+ Hostname = debian
+ Global Address = ******
+ Local Address1 = ******
+ Local Address2 = ******
+ Ver info = Linux #1 Debian 3.2.51-1
+ Kernel = 3.2.0-4-486
+ Uptime = 15:00:50 up 0 min, 1 user, load average: 1,27, 0,30, 0,10
+ CPU =
+ Tasks =
+ Mem = Mem: 1518 173 1344 0
+ Memory = 1554780 kB
++++++++++++++++++: User Data :++++++++++++++++++++
+ Username = ******
+ Privlages = Regular User
+ Sessions = 1 of Unlimited MAX
+ Processes = 2 of MAX
+++++++++++++: Helpful Information :+++++++++++++++
+ Date = 2014. jan. 4., szombat, 15.00.50 CET
+ Lastlog = ****** pts/0 ****** szo jan 4 15:00:49 +0100 2014
+++++++++++++++++++++++++++++++++++++++++++++++++++

Már így is sokmindent módosítottam rajta, de valahogy amemória terheltség (mennyi memo van használatban mennyiből) és a CPU terheltség (kb mint a memo) sehogy sem akar összejönni.
A top-ból próbálgattam infót kiszedni grep-el, de sajna az egy változó értéket ad vissza, így mikor bejelentkezek csak malmozik míg nem nyomok egy ctrl+c -t

Köszi a tippet, így már valamivel jobb!
Most már csak azt kéne kiokoskodni hogy hogyan tudom azt beállítani hogy csak az én fehasználó nevemnél (cstommy) jöjjenek elő ezek az infok
Ezt próbáltam:
UNAME=`whoami`
if [$UNAME != 'cstommy']; then
echo date
else
echo -e "
#azok amiket ki kell írni :)
"
fi

Ez egy olyan problémát ad vissza hogy:
sor: 28: [cstommy: parancs nem található
Shell proghoz nem nagyon értek, de c-ben, php-ben ez fix hogy működne

Ugye a lastlog | grep cstommy ezt adja vissza: cstommy pts/0 ******** v jan 5 14:30:27 +0100 2014

Nekem meg a felhasználó név ebből nem kell (meg mögötte az a rakat space sem) ezért valahogy lekéne vágni az elejét, addig hogy milyen porton jelentkezett be (pl pts/0, vagy tty2). Ha van rá lehetőség akkor az ip meg az előtte-utánna lévő adatok elöl-mögül is kiszeretném venni a spacet.

Az (szinte) biztos, hogy a cut kell hozzá csak valahogy a paraméterezésével nem vagyok megelégedve :)
De már ígyis elértem azt amit akartam :D

Erre lastlog helyett who. Konkrétan javallanám a

who -m

megoldást. Ha nem tartasz igényt a felhasználó nevére, akkor


who -m|tr -s ' '|cut -d ' ' -f 2-

A spaceezést még mindig nem teljesen értem, ha az a bajod, hogy néhol több mint egy van, akkor

|tr -s ' '

, ha meg meg akarsz tőlük szabadulni, akkor

|tr -d ' '

Köszönöm a választ.
Igazából tényleg jobb a who :)
A spaceezést meg pontosan úgy képzeltem el mint ahogy írtad a tr -s -el

Egyébként így utólag az jutott eszembe hogy azt hogyan tudnám beleírni hogy hány frissíthető csomag van és menniy biztonsági updatet (X packages can be updated. Y updates are security updates.) lehet telepíteni.
Illetve azt hogy nincs (vagy van, és mennyi) új emailem

Azt nem értem, hogy ugye van a motd, ami arra való, hogy mindenkinek megmutassuk, meg vannak userenként az indítási scriptek, amik az adott usernek szólnak csak.

Ha csak saját magadnak íratnád ki az infókat, akkor miért a motd-be pakolod, miért nem pl. a ~/.profile, vagy ~/.bashrc fájlba?
Így csak neked írná ki, és egy rendszerfrissítés nem törli le a fenébe, mint ahogy az motd-t fogja majd :-)

Neked nem is motd kell, hanem egy jól összerázott conky.

Most ránéztem az ubuntus szervereimre, nekem semmi ilyesmit nem csinál. Stock telepítés, semmi olyasmi nem lett átállítva rajta, aminek ehhez köze lehet:


login as: root
root@***'s password:
Welcome to Ubuntu 12.04.3 LTS (GNU/Linux 3.2.0-23-virtual x86_64)

* Documentation: https://help.ubuntu.com/
You have new mail.
Last login: Thu Jan 2 20:29:55 2014 from ***
root@***:~#

https://wiki.archlinux.org/index.php/Motd

apropos motd
man pam_motd

Debian-on /etc/pam.d/login -ban:

# Prints the message of the day upon succesful login.
# (Replaces the `MOTD_FILE' option in login.defs)
# This includes a dynamically generated part from /run/motd.dynamic
# and a static (admin-editable) part from /etc/motd.
session optional pam_motd.so motd=/run/motd.dynamic
session optional pam_motd.so

A /etc/init.d/motd szkript update-eli a /run/motd.dynamic -t, alapesetben uname tartalmával (ld. do_start függvény).

Vagy létrehozhatsz egy szkriptet a /etc/update-motd.d könyvtár alá.

Ubuntu: https://wiki.debian.org/motd#What_others_do

napi tagline-t linuxra!

// Happy debugging, suckers
#define true (rand() > 10)

Köszönöm a sok segítséget!
Akkor összefoglalom hogy mi lett a végeredményem:

A megoldás ez alapján a cikk alapján indult el: http://parkersamp.com/2010/10/howto-creating-a-dynamic-motd-in-linux/

Kicsit alakítottunk rajta és ez lett a script:

#!/bin/bash

UNAME=`whoami`

PROCCOUNT=`ps -l | wc -l`
PROCCOUNT=`expr $PROCCOUNT - 4`

IP0=`wget -q checkip.dyndns.org -O - | grep -o "[0-9|.]*"`
IP1=`ifconfig eth0 | grep -o "inet addr:[0-9.]*" | cut -d : -f2`
IP2=`ifconfig eth1 | grep -o "inet addr:[0-9.]*" | cut -d : -f2`

if [[ $(groups) == *irc* ]]; then
ENDPROC=`cat /etc/security/limits.conf | grep "@irc" | grep nproc | awk {'print $4'}`
ENDSESSION=`cat /etc/security/limits.conf | grep "@irc" | grep maxlogins | awk {'print $4'}`
PRIVLAGED="IRC Account"
else
ENDPROC=`cat /etc/security/limits.conf | grep "*" | grep nproc | awk {'print $4'}`
ENDSESSION="Unlimited"
PRIVLAGED="Regular User"
fi

if [ `whoami` != "atefelhasznaloneved" ]; then
echo "Üdv $UNAME"
else
echo -e "
+++++++++++++++++: System Data :+++++++++++++++++++
+ Hostname : `hostname`
+ Global Address : $IP0
+ Local Address1 : $IP1
+ Local Address2 : $IP2
+ Ver info : `uname -s -v`
+ Kernel : `uname -r`
+ Uptime : `uptime | sed 's/.*up ([^,]*), .*/1/'`
+++++++++++++++++: CPU & Mem :+++++++++++++++++++
+ CPU model name : `cat /proc/cpuinfo | grep \"model name\" | cut -c 13-`
+ Top :
`top -b -n 1 | grep top`
+ Memory : `cat /proc/meminfo | grep MemTotal | awk {'print $2/1024'}` MB
`vmstat`
++++++++++++++++++: User Data :++++++++++++++++++++
+ Username : $UNAME
+ Privlages : $PRIVLAGED
+ Sessions : `who | grep $USER | wc -l` of $ENDSESSION MAX
+ Processes : $PROCCOUNT of $ENDPROC MAX
+++++++++++++: Helpful Information :+++++++++++++++
+ Date : `date`
+ Lastlog : `who -m|tr -s ' '|cut -d ' ' -f 2-`
+++++++++++++++++++++++++++++++++++++++++++++++++++

"
fi

A scriptete a /usr/local/bin/dynmotd-ba kell tenni, futtatási jogot kell rá adni, majd az elérését bele kell írni a /etc/profile-fájl végére.
Ez lesz a végeredményünk:

+++++++++++++++++: System Data :+++++++++++++++++++
+ Hostname : debian
+ Global Address : ************
+ Local Address1 : ************
+ Local Address2 : ************
+ Ver info : Linux #1 Debian 3.2.51-1
+ Kernel : 3.2.0-4-486
+ Uptime : 17:22:12 up 17 min, 3 users, load average: 0,00, 0,01, 0,05
+++++++++++++++++: CPU & Mem :+++++++++++++++++++
+ CPU model name : ************
+ Top :
top - 17:22:12 up 17 min, 3 users, load average: 0,00, 0,01, 0,05
Tasks: 99 total, 1 running, 98 sleeping, 0 stopped, 0 zombie
3940 ***** 20 0 4524 1264 980 R 0,0 0,1 0:00.00 top
+ Memory : 1518.34 MB
procs -----------memory---------- ---swap-- -----io---- -system-- ----cpu----
r b swpd free buff cache si so bi bo in cs us sy id wa
0 0 0 1306968 29040 109176 0 0 134 8 26 90 1 0 96 4
++++++++++++++++++: User Data :++++++++++++++++++++
+ Username : *******
+ Privlages : Regular User
+ Sessions : 3 of Unlimited MAX
+ Processes : 2 of MAX
+++++++++++++: Helpful Information :+++++++++++++++
+ Date : 2014. jan. 5., vasárnap, 17.22.12 CET
+ Lastlog : pts/2 2014-01-05 17:22 (**********)
+++++++++++++++++++++++++++++++++++++++++++++++++++

A csillaggal megjelölt helyekre képzeljünk el IP címeket, illetve felhasználó neveket :)
Az közepe felé található if [ `whoami` !=... kezdetű sor pedig arra vonatkozik, hogy ez az üzenet kinek jelenjen meg (én csak hozzáértő felhasználó számára engedélyezem... vagyis magamnak :))

Köszönöm a sok segítséget :D

"Az közepe felé található if [ `whoami` !=... kezdetű sor pedig arra vonatkozik, hogy ez az üzenet kinek jelenjen meg (én csak hozzáértő felhasználó számára engedélyezem... vagyis magamnak :))"

Erre két szebb megoldás is eszembe jutott.
1: csinálsz egy csoportot, akiknek megjelenik az MOTD, és berakod magad a csoportba, a feltétel a csoporttagságot vizsgálja.
2: /etc alatt valahol csinálsz egy fájlt, amibe listázva beírod a felhasználókat, a script egy egyszerű greppel (nem tudom van-e ennél egyszerűbb megoldás) vizsgálja, az adott user a lista tagja-e. Ez gyakorlatilag az 1-es megoldás butított változata, de még mindig szebb, mint beégetni a felhasználó nevét a scriptbe.

sub.
Ja, és én is köszönöm, hogy megosztottad.