web-dev-qa-db-fra.com

scp au serveur distant avec sudo

J'ai un fichier sur le serveur A (qui est derrière un NAT donc pas directement adressable). Le fichier doit être copié sur le serveur B dans un répertoire restreint à root. J'ai un compte sur le serveur B avec les privilèges Sudo. Quelle est la syntaxe de la commande scp?

62
Neil

Tout d’abord, vous devez copier le fichier dans un emplacement où vous avez un accès en écriture sans Sudo.

scp yourfile serverb:

Puis déplacez le fichier en utilisant Sudo

ssh serverb Sudo mv yourfile /path/to/the/destination

Si vous n'avez pas de lieu inscriptible, créez un répertoire temporaire avec le droit d'écriture pour votre utilisateur.

ssh serverb Sudo mkdir tempdir && Sudo chmod 777 tempdir
scp yourfile serverb:tempdir
ssh serverb mv tempdir/yourfile /path/to/the/destination
54
Johan

Avec SCP, vous devez procéder en deux étapes. Cependant, vous pouvez le faire en une opération avec rsync, comme suit:

rsync --rsync-path="Sudo rsync" <LOCALFILE> USER@SERVER2:/root

Remarque: Cela nécessite la configuration NOPASSWD_Sudo. Si vous devez entrer le mot de passe pour Sudo, la procédure en deux étapes est nécessaire.

Pour copier un répertoire, vous devez ajouter le paramètre -r. Et -v pour une sortie commentée.


Pour utiliser la méthode ci-dessus avec les informations d'identification, vous devez les ajouter à votre fichier ~/.ssh/config, par exemple.

Host SERVER2
  HostName server2.example.colm
  User USER
  #IdentityFile ~/.ssh/custom_key.pem
43
MasterCheffinator

Vous pouvez utiliser ssh et tar pour contourner ce problème:

ssh -t Host 'Sudo -v'
ssh -C Host 'cd /; Sudo tar cf - path/to/file/or/dir' | tar xpsf - --preserve

Ceci met d'abord à jour votre horodatage Sudo (demandant un mot de passe si nécessaire, ce qui nécessite un tty (ssh -t)), puis utilise Sudo pour créer une archive à distance et l'extraire localement.

"tar" sur RedHat 5 nécessite les options "--preserve" après la commande "xpsf -".

19
blueyed

Vous pouvez utiliser sftp avec la commande Sudo, par exemple:

sftp -s 'Sudo -u REMOTE_Sudo_USER /usr/libexec/openssh/sftp-server' REMOTE_USER@Host
4
DaniloNC

Si vous devez saisir un mot de passe pour Sudo à chaque fois, vous pouvez l'enregistrer dans un fichier:

echo "Enter password: "; read -s password; echo $password > password_file

puis envoyez-le avec le fichier source.

cat password_file source_file | ssh remote_Host 'Sudo -S sponge target_file'

Vous pouvez utiliser tee au lieu de sponge si vous n’avez pas de moreutils.

0
Jan Tojnar

Tout d'abord, vous devez copier le fichier à un emplacement où vous avez un accès en écriture sans Sudo. Vous pouvez effectuer les deux étapes suivantes.

Étape 1: scp filename newserver

Étape 2: ssh newserver Sudo mv filename /path/to/the/destination

pour plus d'informations lisez le tutoriel scp

0
Mike Tyson