Sur bash en général
La conception de Bash en ce qui concerne les fichiers de démarrage est plutôt particulière. Bash charges .bashrc
dans deux circonstances indépendantes:
Sur SSH en général
Lorsque vous exécutez une commande via le protocole SSH, la commande est transmise sur le câble sous forme de chaîne. La chaîne est exécutée par le shell distant. Lorsque vous exécutez ssh example.com somecommand
, si le shell de connexion de l'utilisateur distant est /bin/bash
, le serveur SSH s'exécute /bin/bash -c somecommand
. Il n'y a aucun moyen de contourner le shell de connexion. Cela permet des shells de connexion restreints, par exemple pour autoriser uniquement la copie de fichiers et non l'exécution générale de commandes.
Il existe une exception: le protocole SSH permet au client de demander un sous-système spécifique. Si le client demande le sftp
sous - système, par défaut, le serveur OpenSSH invoque le programme /usr/lib/openssh/sftp-server
(l'emplacement peut varier) via le shell de connexion de l'utilisateur. Mais il peut également être configuré pour exécuter un serveur SFTP interne via la ligne
Subsystem sftp internal-sftp
dans le sshd_config
fichier. Dans le cas du serveur SFTP interne, et seulement dans ce cas, le shell de connexion de l'utilisateur est contourné.
Pour ce défi
Dans le cas d'OverTheWire Bandit 18, .bashrc
contient
…
# If not running interactively, don't do anything
case $- in
*i*) ;;
*) return;;
esac
…
echo 'Byebye !'
exit 0
Vous pouvez donc résoudre ce niveau en faisant tout ce qui empêche bash d'être interactif.
Comme vous l'avez découvert, SFTP fonctionne.
Mais ssh bandit18@bandit.labs.overthewire.org cat readme
cela fonctionnerait aussi.
Comme ça echo 'cat readme' | ssh bandit18@bandit.labs.overthewire.org
.
Et appuyer sur Ctrl + C au bon moment lors d'une connexion interactive fonctionnerait également: cela interromprait bash, donc le .bashrc
ne serait pas complètement exécuté. Bash prend du temps macroscopique pour démarrer, donc bien que cela ne fonctionne pas de manière fiable, cela peut être fait dans la pratique.