Simple shell script based on bash which monitor a host with command line ping. Just bash and ping are the unique dependencies. Only state change are going to be printed:
#!/bin/bashIP="THE_IP_TO_MONITOR"STATE="offline"show_state(){ echo "$(date '+%Y-%m-%dT%H:%M:%S') - "+$STATE;}while true;do ping -c 4$IP >/dev/null 2>&1if["$?" = "0"]; thenif["$STATE" = "offline"]; then STATE="online" show_state fielseif["$STATE" = "online"]; then STATE="offline" show_state fi fi sleep 10done
I’m a byobu user for a long time, I love it for many reasons. But this is just a quick tip for extreme users like me. I mean people who use byobu for local consoles with remote byobu sessions running on top of SSH, for instance.
When prefix key combinations has to be sent to the remote host we have to press “Control + a + a” and finally the command that we want to send to the remote systems. This is not comfortable many times. So, I modified my configuration file for changing the prefix when I want to send remote commands to the nested byobu.
This is going to work this way:
Control + a
Control + b
Take a look on this screen capture where you can see byobu status bars stacked.
If you find useful the configuration that I described the only thing that you have to do is modify the configuration file: ~/.byobu/keybindings.tmux
Reading time: < 1 minute
Really useful command of ssh package to add public key of your user account to a remote SSH server and then access there with passwordless authentication method.
ssh-copy-id [-i [identity_file]] [user@]machine
In the past I wrote a simple cookbook to explain this process but now this is as simple as possible. Don't forget ssh-copy-id is the most easy way to add your ssh public key in remote servers.
A aquestes altures tothom coneix screen i a quin més qui menos li ha solucionat més d’un problema. Pels que no el coneixeu, podeu donar un cop d’ull als posts que vaig fer sobre el tema:
Pel que fa a les funcionalitats hereda tota la potència i accessos ràpids que té screen, a més d’un entorn basat en ncurses per configurar l’aspecte de les pantalles i comportament de l’eina. És genial amb un cop d’ull poder saber les consoles que tenim obertes i monitoritzar el sistema des de la shell. A més també permet instal·lar-se al ~/.profile de l’usuari de forma senzilla (byobu-launcher-install) perquè al fer un login o un ssh tinguem la sessió directament dintre del byobu.
A la Ubuntu Lucid (10.04) i a Fedora 14 ja he trobat el paquet, pel que fa a MeeGo aquest no estava disponible però m’he baixat el tar.gz i compilar-lo ha estat 1s.
UPDATE 2017/1/18: I just discovered Wetty which is by far the best option that I found to have a Web Terminal completely easy to use and compatible with Linux terminals. I highly recommend it.
En l’article sobre Turnkey Linux vaig parlar sobre shellinabox, doncs bé per coses de l’atzar he descobert que no és l’únic sistema que preten donar accés a una sessió de shell a través d’una pàgina web.
De fet, les tres eines que he trobat són realment bones, així doncs si algú en sap alguna cosa més sobre elles que m’ho digui perquè no sé amb quina quedar-me:
shellinabox: emula un terminal VT100 i es llença com un dimoni que dona accés al host local a través del port que escollim, pot treballar amb o sense SSL.
AJAXTerm: inspirat en ANYTerm però molt més simple d’instal·lar, ja que només depèn de python, o sigui, que treballa com a dimoni en el sistema on volem tenir la shell.
Implementació del XEP-0060, o sigui, d’un servei de publish-subscribe (PubSub) esta escrit amb Python i Twisted. Bàsicament el que permet és que sobre un servidor XMPP estàndard hi podem connectar un servei basat en PubSub, o sigui, que nosaltres publiquem una serie d’informació que un seguit de clients consulten perquè hi estan subscrits. És un mètode basat en events (no-polling) molt adient per disfondre certs tipus d’informació.
A vegades programem shell scripts que necessiten enviar el seu resultat a la xarxa XMPP, per exemple, imagineu que volem comunicar la caiguda d’un servei a través de GTalk, doncs aquest toolkit ens simplifica moltíssim aquesta tasca. Esta programat en ruby i a part de poder-se usar des de la CLI també podem integrar-ho com a llibreria dins d’un codi en ruby.
Una eina senzilla i útil, a més programada totalment en shell script que encara té més merit. Servei per fer coses tan vistoses com un línia de progrés mentre fem un tar, cp, etc.
Una imatge val més que mil paraules…
És fàcil i vistosa, oi que si? en l’exemple es veu com descomprimeixo la pròpia eixa amb una barra de progrés generada per ella mateixa.
Doneu un cop d’ull a la web, a mi m’ha agradat molt l’eina i l’he usat per fer un CD d’instal·lació d’una eina de la feina. Per si la web deixés d’existir, que això ja passa amb aquest tipus d’eines deixo una còpia del programa a l’article: bar-1.4.tar.bz2.
Després de molts anys d’experiències en Unix/Linux encara de vegades m’ofusco en tonteries com la que comento al títol, què trist,eh!? bé doncs perquè no ús passi com a mi que he trigat quasi 10min per inspirar-me i fer algo tan senzill com això:
Suposo que és obvi entendre que volem fer una còpia en un fitxer comprimit del codi que hi ha a directori sense els fitxers i directoris .svn del control de versions (subversion).
La setmana passada vaig fer un petit shell script per fer backup dels repositoris de software del meu servidor. Bàsicament el que fa és mirar a /var/svn/repos quins directoris hi ha. Llavors llença un svnadmin dump i al mateix temps comprimeix amb bzip2 la sortida cap a un fitxer, després aquest fitxer es guarda a /home/backup/subversion que és una unitat de xarxa montada per fer backups en el servidor. L’últim detall que em fa falta comentar és que després de fer la còpia del fitxer, deixa 3 fitxers de cada repositori al directori de backup i la resta els borra. D’aquesta forma tinc 3 còpies de cada un dels repositoris, una d’ahir, l’altre d’abans d’ahir i finalment una de fa 3 dies. Així si passa algún desastre d’incosistència o algo semblant tinc més marge per recuperar el repositori.
Veureu que el codi és molt simple i si algú el vol adaptar no crec que li costi gaire, tot esta programat amb ordres típiques, sense comandes rares ni res. Finalment l’únic que he hagut de fer és posar-lo al cron a alguna hora de matinada.
Un parell de tricks per l’SSH un pel servidor (sshd) i l’altre pel client (ssh).
Si volem deixar accedir només a alguns usuaris al nostre sistema via SSH s’ha de posar al fitxer /etc/ssh/sshd_config la comanda AllowUsers. Aquest eginy l’he extret de Restrict SSH per user.
Un exemple:
AllowUsersrootoysteiviotheradmin
L’altre enginy és molt útil quan programem scripts que usen per exemple: scp, rsync o d’altre similars. A vegades per molt que usem un sistema d’autenticació per clau pública amb ssh això no és suficient perquè hi pot haver un conflicte den la fingerprint que tenim guardada (o no) del servidor on anem a connectar. Llavors se’ns pregunta si volem guardar aquesta fingerprint sinó la tenim guardada o si assumim que hi ha conflicte entre la fingerprint guardada i la que ens esta enviant el sevidor. Per més detalls sobre el problema podeu consultar aquest article de securityfocus SSH Host Key Protection. A més segur que aquest exemple ajudarà a refrescar la memòria sobre el que em refereixo.
$sshssh-server.example.comTheauthenticityofhost'ssh-server.example.com (12.18.429.21)'can't be established.RSAkeyfingerprintis98:2e:d7:e0:de:9f:ac:67:28:c2:42:2d:37:16:58:4d.Areyousureyouwanttocontinue connecting (yes/no)?yes
Per tal de controlar el comportament d’aquest event ho podem fer amb el paràmetre StrictHostKeyChecking=[yes|no|ask], això ho podem posar a /etc/ssh/ssh_config o bé a la línia de comandes a través del flag-o.