# Sshrc fait planter sftp et scp

**URL:** <https://www.debian-fr.org/t/sshrc-fait-planter-sftp-et-scp/79696>\
**Category:** Support Debian\
**Created:** [Juillet 21, 2019, 7:44 UTC](https://www.debian-fr.org/t/sshrc-fait-planter-sftp-et-scp/79696 "2019-07-21T07:44:11Z")\
**Posts on this page:** 12\
**Page:** 1

<div class="post-metadata">

**Author:** ![crustyourmind](https://www.debian-fr.org/user_avatar/www.debian-fr.org/crustyourmind/32/2955_2.png) [@crustyourmind](https://www.debian-fr.org/u/crustyourmind)\
**Post date:** [Juillet 21, 2019, 7:44 UTC](https://www.debian-fr.org/t/sshrc-fait-planter-sftp-et-scp/79696/1 "2019-07-21T07:44:12Z")

</div>

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](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

---

<div class="post-metadata">

**Author:** ![anon44391915](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/a/958977/32.png) [@anon44391915](https://www.debian-fr.org/u/anon44391915)\
**Post date:** [Juillet 21, 2019, 8:10 UTC](https://www.debian-fr.org/t/sshrc-fait-planter-sftp-et-scp/79696/2 "2019-07-21T08:10:38Z")

</div>

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` ?

> [@crustyourmind](#):
>
> les accès sftp et scp sont bloqués…

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 «&nbsp;SSHRC&nbsp;» pour plus d’informations.

> **[Debugging RC Scripts Interfering with SFTP Sessions - OpenSSH/Logging and...](https://en.wikibooks.org/wiki/OpenSSH/Logging_and_Troubleshooting#Debugging_RC_Scripts_Interfering_with_SFTP_Sessions)**
>
> Recent versions of the server do not launch either /etc/ssh/sshrc or ~/.ssh/rc when initiating an SFTP session.

---

<div class="post-metadata">

**Author:** ![crustyourmind](https://www.debian-fr.org/user_avatar/www.debian-fr.org/crustyourmind/32/2955_2.png) [@crustyourmind](https://www.debian-fr.org/u/crustyourmind)\
**Post date:** [Juillet 21, 2019, 8:33 UTC](https://www.debian-fr.org/t/sshrc-fait-planter-sftp-et-scp/79696/3 "2019-07-21T08:33:21Z")

</div>

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](https://cbiot.fr/dokuwiki/doku.php?id=ssh-fail2ban#avoir_un_rapport_de_connexion_ssh)

---

<div class="post-metadata">

**Author:** ![anon44391915](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/a/958977/32.png) [@anon44391915](https://www.debian-fr.org/u/anon44391915)\
**Post date:** [Juillet 21, 2019, 9:43 UTC](https://www.debian-fr.org/t/sshrc-fait-planter-sftp-et-scp/79696/4 "2019-07-21T09:43:01Z")

</div>

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)

```auto
#!/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](https://cbiot.fr/dokuwiki/doku.php?id=ssh-fail2ban#avoir_un_rapport_de_connexion_ssh)

> **send-notification.sh**
>
> ```auto
> #!/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**
>
> ```auto
> ##
> ## 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
> 
> ```

---

<div class="post-metadata">

**Author:** ![anon44391915](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/a/958977/32.png) [@anon44391915](https://www.debian-fr.org/u/anon44391915)\
**Post date:** [Juillet 21, 2019, 10:36 UTC](https://www.debian-fr.org/t/sshrc-fait-planter-sftp-et-scp/79696/5 "2019-07-21T10:36:32Z")

</div>

> [@crustyourmind](#):
>
> cela fonctionne bien, il sert à me notifier les éventuelles connexions ssh

Tu es notifié par SMS ou bien par mail ?

---

<div class="post-metadata">

**Author:** ![crustyourmind](https://www.debian-fr.org/user_avatar/www.debian-fr.org/crustyourmind/32/2955_2.png) [@crustyourmind](https://www.debian-fr.org/u/crustyourmind)\
**Post date:** [Juillet 21, 2019, 10:59 UTC](https://www.debian-fr.org/t/sshrc-fait-planter-sftp-et-scp/79696/6 "2019-07-21T10:59:55Z")

</div>

ç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

---

<div class="post-metadata">

**Author:** ![crustyourmind](https://www.debian-fr.org/user_avatar/www.debian-fr.org/crustyourmind/32/2955_2.png) [@crustyourmind](https://www.debian-fr.org/u/crustyourmind)\
**Post date:** [Juillet 21, 2019, 11:19 UTC](https://www.debian-fr.org/t/sshrc-fait-planter-sftp-et-scp/79696/7 "2019-07-21T11:19:38Z")

</div>

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.

---

<div class="post-metadata">

**Author:** ![anon44391915](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/a/958977/32.png) [@anon44391915](https://www.debian-fr.org/u/anon44391915)\
**Post date:** [Juillet 21, 2019, 11:21 UTC](https://www.debian-fr.org/t/sshrc-fait-planter-sftp-et-scp/79696/8 "2019-07-21T11:21:58Z")

</div>

Super ! 😉

---

<div class="post-metadata">

**Author:** ![choops](https://www.debian-fr.org/user_avatar/www.debian-fr.org/choops/32/8109_2.png) [@choops](https://www.debian-fr.org/u/choops)\
**Post date:** [Juillet 22, 2019, 12:50 UTC](https://www.debian-fr.org/t/sshrc-fait-planter-sftp-et-scp/79696/9 "2019-07-22T12:50:49Z")

</div>

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. 😉

---

<div class="post-metadata">

**Author:** ![crustyourmind](https://www.debian-fr.org/user_avatar/www.debian-fr.org/crustyourmind/32/2955_2.png) [@crustyourmind](https://www.debian-fr.org/u/crustyourmind)\
**Post date:** [Juillet 22, 2019, 1:45 UTC](https://www.debian-fr.org/t/sshrc-fait-planter-sftp-et-scp/79696/10 "2019-07-22T13:45:05Z")

</div>

merci 😉

---

<div class="post-metadata">

**Author:** ![choops](https://www.debian-fr.org/user_avatar/www.debian-fr.org/choops/32/8109_2.png) [@choops](https://www.debian-fr.org/u/choops)\
**Post date:** [Juillet 23, 2019, 12:33 UTC](https://www.debian-fr.org/t/sshrc-fait-planter-sftp-et-scp/79696/11 "2019-07-23T12:33:40Z")

</div>

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`’:

1. 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)_
2. Le décalage vers la droite de 2 espaces pour les 2 dernier blocs n’a pas d’utilité.

Dans ‘`send-notification-data.txt`’:

1. Le ‘`;`’ derrière la valeur de `IP_AUTHORIZED` n’a pas d’utilité réelle.
2. De même pour le décalage vers la droite de 2 espaces avant chaque définition de variable.

[mode tatillon off]

---

<div class="post-metadata">

**Author:** ![crustyourmind](https://www.debian-fr.org/user_avatar/www.debian-fr.org/crustyourmind/32/2955_2.png) [@crustyourmind](https://www.debian-fr.org/u/crustyourmind)\
**Post date:** [Juillet 23, 2019, 1:04 UTC](https://www.debian-fr.org/t/sshrc-fait-planter-sftp-et-scp/79696/12 "2019-07-23T13:04:44Z")

</div>

Un grand merci pour ces précisions  
😉
