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?
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
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
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 -".
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
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.
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