bonjour
Sur un VPS géré avec Yunohost et DEBIAN 9 à jour, j’ai un soucis avec le fichier sshrc
Dès que j’en crée un sur le serveur (/etc/shh/sshrc), cela fonctionne bien (il sert à me notifier les éventuelles connexions ssh ; cf https://cbiot.fr/dokuwiki/doku.php?id=ssh-fail2ban#avoir_un_rapport_de_connexion_ssh ) pour l’accès ssh mais les accès sftp et scp sont bloqués…
(j’ai lu des choses similaires sur la présence de ce fichier sur le web mais pas de réelles solutions)
Auriez vous des idées ? D’avance merci
Bonjour,
Je crois avoir saisi le problème.
Ton fichier /etc/ssh/sshrc
doit produire une sortie standard.
Et cela empêche sftp
et scp
de fonctionner ; d’établir la connexion.
Pourrais-tu nous fournir ton fichier /etc/ssh/sshrc
?
Il n’y a aucun message ?
Encore une fois, aucun script RC n’est autorisé à produire une sortie sur stdout lors de l’utilisation de SFTP, sinon cela ruinerait la connexion. Si un script RC produit une sortie, il doit être redirigé vers un journal système, dans un fichier ou envoyé à stderr au lieu de stdout. Les connexions SSH interactives classiques ne sont pas perturbées par l’utilisation de stdout et le client n’affiche que ce qui est envoyé.
Voir la page de manuel de sshd (8) dans la section “SSHRC” pour plus d’informations.
Merci de ta réponse
Alors voilà le fichier sshrc
$ cat /etc/ssh/sshrc
#!/bin/sh
. /home/admin/scripts/send-notification.sh
Et le fichier send-notification.sh : on peut le trouver là : https://cbiot.fr/dokuwiki/doku.php?id=ssh-fail2ban#avoir_un_rapport_de_connexion_ssh
Le send-notification.sh
comporte des commandes avec une sortie standard.
ainsi qu’un appel à .freemobile-smsapi
qui peut également en comporter.
Je ne suis pas assez en forme pour tenter de l’adapter
@choops ferait probablement une bonne analyse du pb et peut-être une adaptation
Tu peux tenter de modifier /etc/ssh/sshrc
qui appelle le script send-notification.sh
:
(sans garantie)
#!/bin/sh
. /home/admin/scripts/send-notification.sh > /dev/null
2019-07-21T09:41:00Z
Préservation de send-notification.sh
et de send-notification-data.txt
https://cbiot.fr/dokuwiki/doku.php?id=ssh-fail2ban#avoir_un_rapport_de_connexion_ssh
send-notification.sh
#!/bin/sh
# Données utilisateur
. /home/admin/TOTO/send-notification-data.txt
# ========================================================
DATE=$(date "+%d.%m.%Y--%Hh%Mm")
IP=$(echo $SSH_CONNECTION | awk '{print $1}')
REVERSE=$(dig -x $IP +short)
MSG="Connexion de $(echo $USER) sur $(hostname -s)
IP: $IP
ReverseDNS: $REVERSE
Date: $DATE"
##
## La fonction d'envoi SMS
##
fctEnvoiSms()
{
# Script d'envoi de notification SMS via l'API Free Mobile
# https://github.com/C-Duv/freemobile-smsapi-client
# Auteur:v
# modification crust@crust.ovh
readonly PROGNAME=$(basename $0)
readonly PROGDIR=$(readlink -m $(dirname $0))
usage_error () {
echo "ERROR: ${1}" >&2
echo ""
usage_help
exit 1
}
usage_help () {
echo "Possible usages:"
echo "* ${PROGNAME} [options] [message]"
echo "* echo \"All your base are belong to us\" | ${PROGNAME} [options]"
echo ""
echo "Options:"
echo "* -c file specify configuration file"
echo "* -h display this help"
}
CONFIG_FILE=""
while getopts "c:h" option; do
case "$option" in
c) CONFIG_FILE=${OPTARG} ;;
:) usage_error "Invalid arguments" ;;
h) usage_help ; exit 0 ;;
esac
done
shift $((OPTIND-1))
##
## Configuration système
##
# Caractère de fin de ligne
# (http://en.wikipedia.org/wiki/Percent-encoding#Character_data)
NEWLINE_CHAR="%0D" # Valeurs possibles : %0A, %0D et %0D%0A
# URL d'accès à l'API
SMSAPI_BASEURL="https://smsapi.free-mobile.fr"
# Action d'envoi de notification
SMSAPI_SEND_ACTION="sendmsg"
# Texte qui sera ajouté AVANT chaque message envoyé
MESSAGE_HEADER="$(date "+%d.%m.%Y--%Hh%Mm"):
"
# Texte qui sera ajouté APRÈS chaque message envoyé
MESSAGE_FOOTER="
--
$(hostname -s)"
##
## Fichier de configuration
##
if [ -n "${CONFIG_FILE}" ]; then
if [ -e "${CONFIG_FILE}" ]; then
. "${CONFIG_FILE}"
else
echo "ERROR: Configuration file \"${CONFIG_FILE}\" does not exists." >&2
exit 2
fi
else
if [ -e "${PROGDIR}/.freemobile-smsapi" ]; then
. "${PROGDIR}/.freemobile-smsapi"
elif [ -e "${HOME}/.freemobile-smsapi" ]; then
. "${HOME}/.freemobile-smsapi"
fi
fi
##
## Vérifications des paramètres requis
##
if [ -z "${USER_LOGIN}" ] \
|| [ -z "${API_KEY}" ] \
|| [ -z "${SMSAPI_BASEURL}" ] \
|| [ -z "${SMSAPI_SEND_ACTION}" ] \
; then
echo "ERROR: Either USER_LOGIN, API_KEY, SMSAPI_BASEURL or " \
"SMSAPI_SEND_ACTION is not set" >&2
exit 2
fi
##
## Traitement du message
##
MESSAGE_TO_SEND=""
if [ "${1}" ]; then # Message en tant qu'argument de la ligne de commande
MESSAGE_TO_SEND="${1}"
else # Message lu de STDIN
while read line
do
MESSAGE_TO_SEND="${MESSAGE_TO_SEND}${line}\n"
done
MESSAGE_TO_SEND=${MESSAGE_TO_SEND%"\n"} # Retire le dernier saut de ligne
fi
# Assemble header, message et footer
FINAL_MESSAGE_TO_SEND="${MESSAGE_HEADER}${MESSAGE_TO_SEND}${MESSAGE_FOOTER}"
##
## Appel à l'API (envoi)
##
# echo "Will send the following to ${USER_LOGIN}:" #DEBUG
# echo "${FINAL_MESSAGE_TO_SEND}" #DEBUG
# Converts newlines to $NEWLINE_CHAR
FINAL_MESSAGE_TO_SEND=$(\
echo -n "${FINAL_MESSAGE_TO_SEND}" | \
sed '{:q;N;s/\n/'${NEWLINE_CHAR}'/g;t q}'\
)
# echo "Newline encoded message:" #DEBUG
# echo "${FINAL_MESSAGE_TO_SEND}" #DEBUG
# Particularités de l'appel de curl et la/les options associées :
# * Renvoi le code réponse HTTP uniquement :
# --write-out "%{http_code}" --silent --output /dev/null
#
HTTP_STATUS_CODE=$(\
curl \
--write-out "%{http_code}" \
--silent \
--output /dev/null \
--get "${SMSAPI_BASEURL}/${SMSAPI_SEND_ACTION}" \
--data "user=${USER_LOGIN}" \
--data "pass=${API_KEY}" \
--data "msg=${FINAL_MESSAGE_TO_SEND}" \
)
# Codes réponse HTTP possibles
# 200 : Le SMS a été envoyé sur votre mobile.
# 400 : Un des paramètres obligatoires est manquant.
# 402 : Trop de SMS ont été envoyés en trop peu de temps.
# 403 : Le service n'est pas activé sur l'espace abonné, ou login / clé
# incorrect.
# 500 : Erreur côté serveur. Veuillez réessayez ultérieurement.
if [ "${HTTP_STATUS_CODE}" -eq 200 ]; then
# echo "API responded with 200: exiting with 0" #DEBUG
exit 0
echo "Error: API responded with ${HTTP_STATUS_CODE}"
else
exit 1
fi
}
##
## ENVOI SMS / MAIL
##
# QUOI QU'IL EN SOIT ON ENVOIE UN MAIL
echo "$MSG" | mail -s "$(echo $DATE) : Connexion de $(echo $USER) sur $(hostname -s)" $DEST
# GESTION DES IP AUTORISEES / SMS
if echo "$IP" | egrep $IP_AUTHORIZED ; then
echo "MATCH NO SEND SMS";
else
fctEnvoiSms "Connexion SSH de $(echo $USER) ; IP : $(echo $IP)"
fi
send-notification-data.txt
##
## IP A AUTORISER SANS ALERTE SMS
##
# Décommenter cette variable et saisir l'IP de connexion permise sans alerte
# SMS. Si plusieurs IP, les séparer d'un espace
IP_AUTHORIZED='12.345.67.890';
##
## NOTIFICATION SMS
##
# Login utilisateur / identifiant Free Mobile (celui utilisé pour accéder à
# l'Espace Abonné)
USER_LOGIN="123456789"
# Clé d'identification (générée et fournie par Free Mobile via l'Espace Abonné,
# "Mes Options" : https://mobile.free.fr/moncompte/index.php?page=options)
API_KEY="aBcDeFgHiJkL"
##
## NOTIFICATION MAIL
##
# Nom du destinaire de la notification par mail
DEST=mon.mail@domaine.com
Tu es notifié par SMS ou bien par mail ?
ça dépend du PC depuis lequel je me connecte
Si c’est l’ip de mon domicile qui se connecte qu’une notification mail sinon notification ET mail
merci pour ton intérêt
Un grand merci, j’ai installé la redirection > /dev/null et ça marche tip top.
Résolu
Encore merci, j’ai pourtant lu la doc mais avais zappé le truc.
Super !
Oops… J’avais pas vu que j’étais cité.
Même si c’est déjà résolu, je vais jeter un oeil au script quand j’aurai un peu de temps, voir si ça ne peut pas s’opimiser un poil.
merci
Ben, c’est déjà pas mal propre et super documenté comme code.
[mode tatillon on]
Quelques petites questions de forme, mais c’est sans importance pour le comportement du script:
Dans ‘send-notification.sh
’:
- Perso, je réserve la notation de variables tout en majuscules aux variables d’environnement. Pour des variables ‘standard’ je préfère du tout minuscule. (éventuellement, j’irais juste mettre en majuscule les variables sourcées parce qu’elles sont extérieures au script, mais la plupart du temps je m’en tiens à la distinction ‘variables du script et de ses sources en minuscule’ / ‘variables d’environnement en majuscule’, mais ça reste une convention perso)
- Le décalage vers la droite de 2 espaces pour les 2 dernier blocs n’a pas d’utilité.
Dans ‘send-notification-data.txt
’:
- Le ‘
;
’ derrière la valeur deIP_AUTHORIZED
n’a pas d’utilité réelle. - De même pour le décalage vers la droite de 2 espaces avant chaque définition de variable.
[mode tatillon off]
Un grand merci pour ces précisions