Yop

Aller au contenu | Aller au menu | Aller à la recherche

vendredi, 5 juin 2009

Execution de commandes lors d'une connexion SSH

Extrait du man ssh

/etc/ssh/sshrc
Commands in this file are executed by ssh when the user logs in, just before the user's shell (or command) is started. See the sshd(8) manual page for more information.



Exemple ici de fichier /etc/ssh/sshrc pour l'envoi d'un mail d'alerte à l'administrateur:

DATE=`date "+%d.%m.%Y--%Hh%Mm"`
IP=`echo $SSH_CONNECTION | awk '{print $1}'`
REVERSE=`dig -x $IP +short`

echo "Connexion de $USER sur $HOSTNAME

IP: $IP
ReverseDNS: $REVERSE
Date: $DATE

" | mail -s "Connexion de $USER sur $HOSTNAME" user@example.org

USER et HOSTNAME sont les variables d'environnement déjà existantes.

MailLoginSsh-uggy1.png

Il va de soit pour tout le monde qu'OpenSSH doit être sécurisé en authorisant UNIQUEMENT les authentifications par clé (et non pas par mot de passe)... Mais ceci est un autre sujet.

mardi, 9 octobre 2007

keyboardcast - Pour entrer des commandes sur plusieurs fenêtres en même temps

Keyboardcast permet d'envoyer les frappes du clavier dans plusieurs fenêtres simultanément.

Ceci se montre particulièrement utile pour lançer des commandes sur plusieurs serveurs SSH en même temps. Je préfère sa souplesse à d'autres outils comme Fanterm ou encore ClusterSSH.

On pourrait aussi par exemple s'en servir pour lançer les même commandes en telnet vers plusieurs serveurs. (Dans ce cas seul le nom du serveur est à "personnaliser").Etc...

Il ne semble pas fonctionner avec tous les "terminaux" comme Eterm ou Putty (a voir)... mais aucun problème avec gnome-terminal. (On peut même par exemple taper dans plusieurs fenêtres gedit...etc..)

Il permet aussi de lançer un "lôt" de connexions SSH dans des gnome-terminal pour éviter d'ouvrir "à la main" les fenêtres, puis de les ajouter à la sélection.

Il est également dispo dans certains dépots.

jeudi, 15 mars 2007

dns2tcp - Encapsulation dans des requêtes DNS

  • Introduction

dns2tcp est un outils permettant d'encapsuler du trafic dans des requêtes DNS.

La partie serveur simule un serveur DNS (donc doit écouter sur le port 53) et est par exemple à installer sur sa ligne Adsl perso. Le client encapsule les données dans des requêtes DNS qui sont envoyées au serveur interne spécifié. Ce serveur DNS qui lui à le plus souvent accès au port 53 vers Internet (ou en tous cas de résoudre des domaines externes), transmet à notre faux serveur DNS les données qui sont ensuite décapsulées. Le retour des paquets ce fait de la même manière.

  • Coté DNS

Il est nécessaire d'ajouter une entrée dans les DNS exemple:

dns2tcp.example.org NS 1.2.3.4

C'est en essayant de résoudre des sous domaines de ce nom que les paquets arriveront jusqu'au faux serveur DNS.

  • Coté serveur

cat /etc/dns2tcpd.conf
listen = 0.0.0.0
port = 53
user=nobody
chroot = /var/empty/dns2tcp/
domain = dns2tcp.example.org
ressources = sshYop:127.0.0.1:22

Ici nous indiquons qu'une connexion vers le port 22 du même serveur sera accessible sous le nom arbitraire sshYop

Lancement du server (ici en mode debug...)

sudo dns2tcpd -F -d 1 -f /etc/dns2tcpd.conf

  • Coté client

Lister les "connexions disponibles"

dns2tcpc -z dns2tcp.example.org 192.168.1.1

Les paramètres étant le nom de domaine et le serveur DNS accessible (dans l'exemple 192.168.1.1).

La réponse doit être:

Available connection(s) :
sshYop

Pour monter la connexion "DNS":

dns2tcpc -c -r sshYop -l 4430 -z dns2tcp.example.org 192.168.1.1

Les paquets envoyés vers le port 4430 local seront donc envoyés dans l'exemple au port 22 de la machine dns2tcp.example.org (mais tout ceci uniquement avec des requêtes DNS).

Pour monter la connexion SSH:

ssh -p 4430 127.0.0.1

Du browsing est par exemple possible avec la partie Socks de Ssh:

ssh -D 3333 -p 4430 127.0.0.1

  • Résumé en image

  • Conclusion

Ce programme permet donc d'accéder à Internet quand on a seulement le droit d'accéder à un serveur DNS "interne".
Les "voyageurs" verront tout de suite l'utilité ;)

Merci Modu ;)

lundi, 15 janvier 2007

Protection contre un halt/reboot accidentel en SSH

Pour ne pas risquer d'arrêter ou de rebooter par erreur une machine à laquelle on est connecté par SSH.

A mettre dans le fichier bashrc utilisé par le serveur :

function halt() {
if [[ -z `ps -p $PPID | grep ssh` ]]; then
/sbin/shutdown -h now
else
echo ""
echo ""
echo " ### WARNING ## "
echo ""
echo " To prevent errors, 'halt' command used into an SSH session is disabled "
echo ""
echo ""
fi
}

function reboot() {
if [[ -z `ps -p $PPID | grep ssh` ]]; then
/sbin/shutdown -r now
else
echo ""
echo ""
echo " ### WARNING ## "
echo ""
echo " Hostname: `hostname`"
echo " IP address: `ifconfig eth0|grep "inet ad"|awk '{print $2}'|awk -F ':' '{print $2}'`"
echo ""
echo " To prevent errors, 'reboot' command used into an SSH session is disabled "
echo ""
echo " (If you are really sure you want to reboot, please use the command: 'iwantreboot' ) "
echo ""
echo ""
fi
}

alias iwantreboot='/sbin/shutdown -r now'

Rien de compliqué... mais si cela peut éviter un aller/retour en salle serveur alors qu'on pensait éteindre son poste... ;)

dimanche, 31 décembre 2006

Exécution d'un script local sur un serveur distant

Parfois utile lorsque l'on code un script en local, mais que l'on souhaite l'exécuter ou le tester sur un autre serveur (sans avoir a le transférer d'abord)

cat script.sh | ssh user@host bash

cat script.sh | ssh user@host "bash -s"


Si l'option -s est présente, ou s'il n'y a plus d'arguments sur la ligne de commande, après le traitement des options, l'interprétation se fera depuis l'entrée standard. Cette option permet de remplir les paramètres positionnels tout en invoquant un shell interactif.

- page 2 de 4 -