25 votes

scp : erreur : nom de fichier inattendu :

Un SCP que j'utilise depuis longtemps pour télécharger des fichiers a soudainement cessé de fonctionner. J'ai exécuté le script il y a 12 heures et il fonctionnait parfaitement, mais il s'est soudainement arrêté.

La commande en question téléchargeait le répertoire actuel vers un dossier distant :

#!/bin/bash
cd "$(dirname "$0")"

scp -r . <remote_server>:<remote_folder>

Le message d'erreur est le suivant :

scp: error: unexpected filename: .

Je suis sur un Mac exécutant Mojave 10.14.2.

MISE À JOUR : J'ai résolu le problème spécifique en réécrivant la commande comme ceci, mais je serais toujours intéressé de savoir ce qui a cassé :

scp -r $(pwd) <remote_server>:<remote_folder>

22voto

BlackBear Points 346

Le coupable est CVE-2018-20685 dont la description est :

Dans OpenSSH 7.9, le fichier scp.c du client scp permet aux serveurs SSH distants de de contourner les restrictions d'accès prévues via le nom de fichier de . ou un nom de fichier vide. vide. L'impact est de modifier les permissions de la cible cible du côté client.

Cela fait partie d'un un ensemble plus large de vulnérabilités SCP . Citation de là :

Vue d'ensemble

Les clients SCP de plusieurs fournisseurs sont sensibles à un scp malveillant. malveillant effectuant des modifications non autorisées du répertoire cible et/ou une la manipulation de la sortie du client.

Description

De nombreux clients scp ne vérifient pas si les objets renvoyés par la fonction scp correspondent à ceux qu'ils ont demandés. Ce problème remonte à 1983 et à rcp, sur lequel scp est basé. Une autre faille dans le client permet au attributs du répertoire cible d'être modifiés arbitrairement. Enfin, deux vulnérabilités dans les clients peuvent permettre au serveur d'usurper la sortie.

El commit qui corrige cette vulnérabilité dans OpenBSD a été faite le 16 novembre 2018.

13voto

Stéphane Points 291

L'autre réponse de @BlackBear explique pourquoi cela ne fonctionne plus.

Mais si, comme moi, vous avez abouti à cette question et que vous cherchez aussi une solution, il semble que la bonne façon de procéder soit la suivante rsync 代わりに scp . Par exemple, un de mes anciens scp les commandes auraient ressemblé à ça :

# this no longer works due to the "."
scp -BCr output/html/. www:/var/www/site/html/

Maintenant, à la place, j'utilise ceci :

rsync --recursive --times --compress --delete --progress output/html/ www:/var/www/site/html/

Si vous préférez les drapeaux plus courts, cela ressemblerait à ceci :

rsync -rtz --del --progress output/html/ www:/var/www/site/html/

La queue / sur la source est importante. Il indique à rsync que vous voulez que le contenu de ce répertoire sans le nom du répertoire.

Considérez également --dry-run y man rsync avant de tout gâcher.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X