Changer d'utilisateur pendant scp

16

J'ai besoin de copier un fichier entre des machines Linux. Le problème que l'utilisateur que j'utilise pour me connecter ( myuser) est différent de celui qui peut accéder au fichier.

Si je viens sshà la machine, je peux changer d'utilisateur en utilisant sudo su someuser, puis-je le faire d'une manière ou d'une autre scp?

En utilisant WinSCP, j'ai réussi à le faire, en configurant le SCP / Shell, donc je pense qu'il doit y avoir une manière similaire de le faire via le shell pur.

Tarlog
la source
Je suis confus. Pourquoi ne vous connectez-vous pas en tant qu'utilisateur qui manipule le fichier?
rahmu
Parce qu'il est impossible de se connecter avec l'autre utilisateur.
Tarlog
Que diriez-vous de vous connecter sshet d'exécuter scpquelque chose comme ceci ssh myuser@host "sudo scp ...":?
rahmu
Peut-être que la réponse ici peut fonctionner dans une telle situation? unix.stackexchange.com/questions/43094/… @Tarlog Cela suppose que sur la machine distante elle-même, vous pouvez ssh someuser @ remote
Bernhard

Réponses:

9

En supposant que l'utilisateur auquel vous pouvez envoyer ssh n'a pas besoin d'un mot de passe pour sudo su dans l'utilisateur cible, vous pouvez essayer ceci:

dd if=myfile | ssh some.host "sudo -u targetuser dd of=myfile" 

... Attention, je ne suis toujours pas convaincu que la simple configuration targetuserpour n'autoriser scp / sftp / rsync que sur SSH et l'utilisation d'une paire de clés RSA pour l'authentification ne soit pas une bien meilleure option.

Shadur
la source
1
ou tar -cvf - * | ssh user@host "sudo -u targetuser tar -C /targetdir -xf -"pour un tas de fichiers
Matt
Aussi vrai, et je suppose que nous pouvons débattre si -zou -jsont utiles en fonction de la vitesse de connexion et le matériel informatique de chaque côté ...
Shadur
3

Si vous connaissez les informations d'identification de l'autre utilisateur ( someuser), vous pouvez simplement le spécifier lors de votre scpappel.

Depuis la man scppage:

Les noms de fichiers peuvent contenir une spécification d'utilisateur et d'hôte pour indiquer que le fichier doit être copié vers / depuis cet hôte. Les noms de fichiers locaux peuvent être rendus explicites en utilisant des chemins absolus ou relatifs pour éviter que scp ne traite les noms de fichiers contenant «:» comme spécificateurs d'hôte. Les copies entre deux hôtes distants sont également autorisées.

Voici la syntaxe utilisée:

[[user@]host:]/path/to/file

Exemple

Vous souhaitez copier le fichier /home/foo/bardepuis host1votre hôte local, en utilisant l'utilisateur someuser, voici la commande:

scp someuser@host1:/home/foo/bar .

Une authentification vous sera demandée (mot de passe, clés, ...).

rahmu
la source
1
Il est impossible de se connecter en tant qu'autre utilisateur.
Tarlog
Ensuite, établissez une connexion scp / rsync uniquement avec les clés RSA.
Shadur
1
Il est impossible d'utiliser l'autre utilisateur en utilisant n'importe quel type de connexion. Autre que j'utilise déjà les clés RSA pour ssh / scp.
Tarlog
1

C'est probablement possible , mais je dirais que c'est une façon très maladroite de s'y prendre.

Ma première suggestion est de vous connecter en tant qu'utilisateur. Même si vous n'avez pas le mot de passe de cet utilisateur, vous pouvez ajouter votre propre clé publique ssh à leurs clés autorisées puis scp en utilisant leur clé, comme le montre rahmu.

Si ce n'est pas possible, ma deuxième suggestion est de se connecter par ssh, sudo à l'utilisateur et de créer un fichier tar des fichiers que vous souhaitez copier et de le placer quelque part que votre propre utilisateur peut lire. Ensuite, faites défiler ce fichier tar.

Jenny D
la source
Il est impossible de se connecter à l'autre utilisateur. Oui, j'ai moi-même compris la deuxième suggestion. Vous cherchez un moyen facile :)
Tarlog
Le lien affiché par gcb devrait donc être utile. Au moins si vous allez faire cela plus d'une fois. Ou, bien sûr, vous pouvez modifier les droits d'accès au fichier pour permettre à votre propre utilisateur d'y accéder.
Jenny D
Eh bien, j'essaie de créer un script (qui va être utilisé plusieurs fois bien sûr) qui sera utilisé par différents utilisateurs. Donc, m'accorder l'accès ne m'aidera pas vraiment. Quiconque est capable de «sudo su autre utilisateur» devrait pouvoir exécuter le script.
Tarlog
Je t'ai eu. Je commencerais par le lien de gcb, puis si vous avez des problèmes avec le script, postez-le et voyez si nous pouvons faire appel à de l'aide.
Jenny D
0

J'ai essayé de donner quelques exemples dans l'article suivant. L'idée de base n'est pas d'utiliser scp, mais d'utiliser dd et ssh avec le commutateur utilisateur sudo. Regardez:

http://hmmss.wordpress.com/2014/07/02/ssh-and-scp-with-another-user

Gokhan Demir
la source
1
Il serait préférable de fournir plus de détails ici, si le lien devient invalide, votre réponse a peu de valeur.
Anthon