221 votes

Comment copier des fichiers nécessitant un accès root avec scp?

J'ai un serveur Ubuntu auquel je me connecte en utilisant SSH.

J'ai besoin de téléverser des fichiers depuis mon ordinateur dans /var/www/ sur le serveur, les fichiers dans /var/www/ sont possédés par root.

En utilisant PuTTY, après m'être connecté, je dois taper sudo su et mon mot de passe d'abord pour pouvoir modifier les fichiers dans /var/www/.

Mais lorsque je copie des fichiers en utilisant WinSCP, je ne peux pas créer/modifier des fichiers dans /var/www/, car l'utilisateur avec lequel je me connecte n'a pas les permissions sur les fichiers dans /var/www/ et je ne peux pas taper sudo su comme je le fais en cas de session ssh.

Sais-tu comment je pourrais gérer cela ?

Si je travaillais sur mon ordinateur local, je lancerais gksudo nautilus mais dans ce cas, j'ai seulement accès au terminal de la machine.

0voto

Une question plus ancienne, je sais, mais les temps changent et certaines techniques aussi. Juste au cas où quelqu'un cherche toujours un moyen simplifié pour accomplir ceci.

Hypothèses

  1. Votre utilisateur sur le serveur est un sudoers.
  2. Vous utilisez Windows 10.
  3. Les fichiers dans /var/www doivent appartenir à l'utilisateur:groupe www-data:www-data

Concept

Le concept consiste à combiner des commandes à distance via ssh et des transferts de fichiers avec scp sans avoir recours à des interfaces graphiques telles que PuTTy ou WinSCP. Ces commandes peuvent être exécutées depuis un Command Prompt ou PowerShell. Il y a cinq tâches principales à effectuer:

  1. Configuration de l'environnement
  2. Transférer des fichiers vers le serveur
  3. Définir les permissions des fichiers à distance
  4. Transférer entre des dossiers distants
  5. Nettoyage

Les tâches 3 à 5 peuvent être effectuées en une seule étape. Si vous prévoyez de faire cela souvent, laisser la configuration de l'environnement vous permettra d'omettre les tâches 1 et 5.

Configuration de l'Environnement

Vous avez peut-être déjà un dossier que vous pouvez utiliser comme un dépôt temporaire pour le transfert. Sinon, vous pouvez exécuter :

ssh utilisateur@serveur.tld "mkdir ~/wwwtemp"

En fonction des paramètres de votre serveur, vous pouvez être invité ou non à entrer le mot de passe/phrase secrète de l'utilisateur pour authentifier la session ssh.

Une fois la session authentifiée, la commande mkdir ~/wwwtemp s'exécutera, ensuite la session ssh se terminera et vous reviendrez à votre invite de commande (Command Prompt ou PowerShell).

Transférer des Fichiers vers le Serveur

La prochaine étape consiste à transférer les fichiers de la machine Windows locale vers le serveur Ubuntu en utilisant scp comme suit :

scp -R chemin\local utilisateur@serveur.tld:~/wwwtemp/

En fonction de la méthode d'authentification de votre serveur, vous devrez peut-être entrer un mot de passe/phrase secrète ou non.

Permissions et Destination Finale des Fichiers

Une fois le transfert de fichiers terminé, vous pouvez exécuter une série de commandes via ssh comme suit :

ssh -t utilisateur@serveur.tld "sudo chown -R www-data:www-data ~/wwwtemp  && sudo mv -R ~/wwwtemp/* /var/www/ && sudo rmdir ~/wwwtemp"

Encore une fois, en fonction de la méthode d'authentification de votre serveur, vous pouvez être invité ou non à entrer un mot de passe/phrase secrète. Indépendamment de votre méthode d'authentification, sudo vous demandera le mot de passe de l'utilisateur. Sauf si, bien sûr, vous avez désactivé l'exigence de mot de passe lorsque l'utilisateur exécute chown mv et rmdir. Consultez cette question pour des conseils sur la façon de le faire.

Cette étape couvre les tâches 3 à 5 :

  1. sudo chown -R www-data:www-data ~/wwwtemp définit de manière récursive les permissions de fichier souhaitées sur les fichiers que vous venez de télécharger.
  2. sudo mv -R ~/wwwtemp/* /var/www/ déplace de manière récursive le contenu du dépôt temporaire vers sa destination finale.
  3. sudo rmdir ~/wwwtemp supprime le dépôt temporaire. Il est nécessaire d'utiliser sudo ici car nous avons changé le propriétaire du répertoire dans la tâche 3.

Évidemment, && sépare chaque commande. Les commandes seront exécutées dans l'ordre. Si vous prévoyez de conserver le dépôt wwwtemp, vous pouvez omettre la commande finale de la séquence.

Notes

Vous pouvez omettre && sudo rmdir ~/wwwtemp à la fin de la chaîne de commande ssh finale si vous souhaitez continuer à utiliser le dépôt temporaire à l'avenir. Ce faisant, vous pouvez aussi omettre la première commande ssh chaque fois que vous souhaitez transférer des fichiers vers votre serveur de cette manière.

0voto

user1435413 Points 1
$ scp -i example.pem -r sourcefilr.txt ubuntu@10.12.3.4:/example_folder

Avant d'exécuter cette commande, nous devons donner les permissions complètes au dossier example_folder :

$ sudo chmod 777 example_folder

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