Comment extraire un fichier d'un serveur en utilisant scp?

31

Je suis sur la machine A et je veux extraire un fichier de la machine B.

A$ scp <myuserid>@hostB:<path of file in B> .

il dit que:

scp: <path of file in B>: No such file or directory

Mais sur la machine B, ce fichier existe dans ce chemin.

Qu'est-ce qui ne va pas?

xyz
la source
Est-ce le format exact de la commande que vous avez exécutée? Ou y avait-il un nom de fichier après le «:»?
dtyler

Réponses:

43

Vous n'avez spécifié aucun fichier: vous devez ajouter le fichier (avec chemin) après les deux points:

A$ scp <myuserid>@hostB:/absolutepath/file .

ou

A$ scp <myuserid>@hostB:relativepath/file .

pour un chemin relatif à votre répertoire personnel.

Si vous ne spécifiez pas un utilisateur différent (c.-à-d., L'utilisateur sur A et B sont les mêmes), vous n'avez pas besoin du @

A$ scp hostB:/path/file .
Matteo
la source
2
J'ai corrigé la mise en forme dans la question, mais peut-être que votre réponse est toujours valide. Le problème peut provenir d'une confusion entre les chemins absolus et relatifs (à la maison).
Stéphane Gimenez
@ StéphaneGimenez maintenant que je vois la réponse éditée que je comprends. Cela semblait une question étrange :-)
Matteo
4
$ scp username@remoteip:remote_location_file /location/where/you/save

Cela ne fonctionne que lorsque vous copiez un fichier. si vous voulez copier un répertoire utilisez

$ scp -r username@remoteip:remote_location_directory /location/where/you/save

Option que vous pouvez utiliser à votre demande

-P port
Spécifie le port auquel se connecter sur l'hôte distant. Notez que cette option est écrite avec un "P" majuscule, car -p est déjà réservé pour conserver les heures et les modes du fichier dans rcp.

-p
Préserve les temps de modification, les temps d'accès et les modes du fichier d'origine.

-r
Copie récursivement des répertoires entiers.

-v

Mode verbeux. Demande à scp et ssh d'imprimer des messages de débogage sur leur progression. Cela est utile pour déboguer les problèmes de connexion, d'authentification et de configuration.

Rakib
la source
1
L'OP a demandé la copie d'un fichier, pas d'un répertoire.
contre-mode
2

utiliser le chemin scp approprié

scp ssh://user@hostname/tmp/foo.txt .

la source
1

Vous pouvez spécifier soit un chemin de fichier relatif à votre répertoire personnel, soit un chemin de fichier absolu. Par exemple, si se foo.txttrouve dans un répertoire appelé docssous votre répertoire personnel et se bar.txttrouve dans /var/tmp, vous pouvez faire

scp [email protected]:docs/foo.txt .
scp [email protected]:/var/tmp/bar.txt .

Notez que si le nom de fichier contient des caractères spéciaux pour le shell distant (généralement des espaces ou !"#$&'*;<>?[\]^`{|}~), vous devez les échapper pour le shell distant en plus de les échapper pour le shell local. Par exemple, si le fichier est appelé foo bar.txtet se trouve dans votre répertoire personnel:

scp [email protected]:'foo\ bar.txt' .

Si vous rencontrez des difficultés avec les fichiers contenant des signes de ponctuation, essayez d'utiliser sftpplutôt que de scples transférer. Ou utilisez une méthode encore plus pratique, si vous pouvez utiliser FUSE : montez le système de fichiers de la machine distante à l'aide de sshfs , puis utilisez des commandes de manipulation de fichiers ordinaires.

mkdir host.example.com
sshfs [email protected]:/ host.example.com
cp host.example.com/path/to/file .
Gilles, arrête de faire le mal
la source
1

On peut SCP dans les deux sens facilement si l'on a l'utilisateur DMZ et le mot de passe. Vous êtes sur votre machine locale: de DMZ à votre machine Linux locale (pull). Signifie copier abc.text dans le dossier2 vers votre PWD actuellement connecté.

scp user@111111:folder1/folder2/abc.txt .

Il vous demandera un mot de passe

c'est tout

Maintenant, vous voulez envoyer un dossier avec des sous-dossiers et des fichiers de votre machine locale à DMZ:

usr @ localmachine: ~ / abc / defs> dossier scp -r / usr @ 111111: vkrishna / docker /

nouveau mot de passe sera demandé

: est le dossier racine de la machine distante et vkrishna est un dossier là-bas & sous-dossier docker. Le dossier defs localement a un dossier appelé "dossier" que nous voulons transférer complètement.

Comme / abc / defs / dossier

vimal krishna
la source