Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

faire du scp par ssh ?

28 réponses
Avatar
Une Bévue
sur un serveur auquel j'accède par ssh, j'aimerais pouvoir transférer
des fichiers par scp, est-ce possible ?

je veux dire, depuis le client je lance un script sur le serveur par ssh
lequel script renverrait des fichiers et dossiers par scp.

bon, des deux côtés la connection se fait sans passphrase, elle est
exigée au login (ssh-askpass).

mais il y a, peut-être un pb d'user. des deux côtés, c'est le même user
MAIS je ne suis pas sûr du tout que le script sur le server tourne sous
le même user vu qu'il est commandé par ssh. (?)

10 réponses

1 2 3
Avatar
Doug713705
Le 17-11-2012, Une Bévue nous expliquait dans fr.comp.os.linux.configuration :
sur un serveur auquel j'accède par ssh, j'aimerais pouvoir transférer
des fichiers par scp, est-ce possible ?

je veux dire, depuis le client je lance un script sur le serveur par ssh
lequel script renverrait des fichiers et dossiers par scp.

bon, des deux côtés la connection se fait sans passphrase, elle est
exigée au login (ssh-askpass).

mais il y a, peut-être un pb d'user. des deux côtés, c'est le même user
MAIS je ne suis pas sûr du tout que le script sur le server tourne sous
le même user vu qu'il est commandé par ssh. (?)



SSH se contrefout de l'utilisateur que tu utilises, la seule chose qui
compte à ses yeux est l'identification qui est faite de l'autre coté.

Je n'ai pas vraiment compris ce que tu veux faire mais si tu veux :
1 - Accéder à un serveur via SSH
2 - Envoyer depuis ce serveur des fichiers vers le poste que tu as
utilisé pour te connecter sur le serveur

Alors, oui, c'est possible mais dans ce cas pourquoi ne pas utiliser
directement scp depuis le poste client ?

scp :/chemin/vers/fichier/distant
/chemin/vers/fichier/local

Pour faire l'opération dans l'autre sens (envoyer des fichiers locaux au
serveur distant), il suffit de :

scp /chemin/vers/fichier/local
:/chemin/vers/fichier/distant

Dans les deux cas ton mot de passe _distant_ sera réclamé avant la
récupération/envoi des données.

--
Doug - Linux user #307925 - Slackware64 roulaize ;-)
Without freedom of choice there is no creativity.
-- Kirk, "The return of the Archons", stardate 3157.4
Avatar
Une Bévue
Le 17/11/12 21:48, Doug713705 a écrit :


SSH se contrefout de l'utilisateur que tu utilises, la seule chose qui
compte à ses yeux est l'identification qui est faite de l'autre coté.

Je n'ai pas vraiment compris ce que tu veux faire mais si tu veux :
1 - Accéder à un serveur via SSH
2 - Envoyer depuis ce serveur des fichiers vers le poste que tu as
utilisé pour te connecter sur le serveur



me connecter au server par ssh, en gros je fais :

ssh '/path/to/mon-script.rb'

et je voudrais, depuis "mon-script.rb" envoyer des fichiers/dossiers,
par scp sur le client appellant.

Alors, oui, c'est possible mais dans ce cas pourquoi ne pas utiliser
directement scp depuis le poste client ?



ben parce que je ne connais pas au moment où je lance via ssh
"mon-script.rb" le path des dits fichiers/dossiers.

scp :/chemin/vers/fichier/distant
/chemin/vers/fichier/local

Pour faire l'opération dans l'autre sens (envoyer des fichiers locaux au
serveur distant), il suffit de :

scp /chemin/vers/fichier/local
:/chemin/vers/fichier/distant



je sais ça.
je l'utilise régulièrement en cli, c'est différent par un script qui se
connecte à un autre script.

Dans les deux cas ton mot de passe _distant_ sera réclamé avant la
récupération/envoi des données.



non, j'ai un ssh-askpass au login où j'entre une seule fois par session
ma passphrase.
Avatar
Francois Lafont
Bonsoir,

Le 17/11/2012 21:00, Une Bévue a écrit :

sur un serveur auquel j'accède par ssh, j'aimerais pouvoir transférer
des fichiers par scp, est-ce possible ?

je veux dire, depuis le client je lance un script sur le serveur par ssh
lequel script renverrait des fichiers et dossiers par scp.

bon, des deux côtés la connection se fait sans passphrase, elle est
exigée au login (ssh-askpass).

mais il y a, peut-être un pb d'user. des deux côtés, c'est le même user
MAIS je ne suis pas sûr du tout que le script sur le server tourne sous
le même user vu qu'il est commandé par ssh. (?)



Avec :

ssh -l toto MACHINE-DISTANTE sh < le-script-local.sh

ou bien avec :

ssh -l toto MACHINE-DISTANTE sh -c 'ma-commande'

Tu exécuteras en tant que "toto", le script local "le-script-local.sh"
(ou "ma-commande") sur la machine MACHINE-DISTANTE. Du coup, si le
compte "toto" peut accéder à la machine *locale* via un ssh sur
MACHINE-DISTANTE, le tout sans passphrase, alors rien ne t'empêche de
mettre des scp dans ton script pour faire ce que tu souhaites. (J'espère
que c'est clair...)

Après, il y a bien des petites subtilités qui m'échappent un peu. Par
exemple avec :

ssh -l toto MACHINE-DISTANTE sh -c 'echo salut > /home/toto/out'

un fichier out est bien créé à la racine du home de toto sur la machine
MACHINE-DISTANTE mais celui-ci est vide chez moi. J'ai l'impression
qu'au niveau des flux std stderr, il y a quelques petites subtilités.


--
François Lafont
Avatar
Une Bévue
Le 17/11/12 23:35, Francois Lafont a écrit :
Avec :

ssh -l toto MACHINE-DISTANTE sh < le-script-local.sh

ou bien avec :

ssh -l toto MACHINE-DISTANTE sh -c 'ma-commande'

Tu exécuteras en tant que "toto", le script local "le-script-local.sh"
(ou "ma-commande") sur la machine MACHINE-DISTANTE. Du coup, si le
compte "toto" peut accéder à la machine*locale* via un ssh sur
MACHINE-DISTANTE, le tout sans passphrase, alors rien ne t'empêche de
mettre des scp dans ton script pour faire ce que tu souhaites. (J'espère
que c'est clair...)



si c'est clair, c'est ce que j'ai pensé aussi.
si j'ai posté c'est parce que j'ai fait -une fois- la manip et j'ai eu
un message d'erreur* au niveau scp.

Après, il y a bien des petites subtilités qui m'échappent un peu. Par
exemple avec :

ssh -l toto MACHINE-DISTANTE sh -c 'echo salut > /home/toto/out'

un fichier out est bien créé à la racine du home de toto sur la machine
MACHINE-DISTANTE mais celui-ci est vide chez moi. J'ai l'impression
qu'au niveau des flux std stderr, il y a quelques petites subtilités.



oui, les subtilités il y en a, par exemple l'environnement, en distant
n'est pas le même pour le script distant que s'il était lancé localement.

m'enfin, peut-être que mon pb vient aussi de l'adresse IPV6 qui change
tout le temps sur le seveur distant où je ne suis pas parvenu à la fixer.
Avatar
Doug713705
Le 17-11-2012, Une Bévue nous expliquait dans fr.comp.os.linux.configuration :
Le 17/11/12 23:35, Francois Lafont a écrit :
Avec :

ssh -l toto MACHINE-DISTANTE sh < le-script-local.sh

ou bien avec :

ssh -l toto MACHINE-DISTANTE sh -c 'ma-commande'

Tu exécuteras en tant que "toto", le script local "le-script-local.sh"
(ou "ma-commande") sur la machine MACHINE-DISTANTE. Du coup, si le
compte "toto" peut accéder à la machine*locale* via un ssh sur
MACHINE-DISTANTE, le tout sans passphrase, alors rien ne t'empêche de
mettre des scp dans ton script pour faire ce que tu souhaites. (J'espère
que c'est clair...)



si c'est clair, c'est ce que j'ai pensé aussi.
si j'ai posté c'est parce que j'ai fait -une fois- la manip et j'ai eu
un message d'erreur* au niveau scp.



Quel message d'erreur ? Donne nous _toutes_ les informations d'un coup,
il sera plus simple de t'aider.

Après, il y a bien des petites subtilités qui m'échappent un peu. Par
exemple avec :

ssh -l toto MACHINE-DISTANTE sh -c 'echo salut > /home/toto/out'

un fichier out est bien créé à la racine du home de toto sur la machine
MACHINE-DISTANTE mais celui-ci est vide chez moi. J'ai l'impression
qu'au niveau des flux std stderr, il y a quelques petites subtilités.



oui, les subtilités il y en a, par exemple l'environnement, en distant
n'est pas le même pour le script distant que s'il était lancé localement.



Si l'environnement n'est pas le même c'est simplement qu'ils n'ont pas
été configuré de la même manière !À toi d'éditer /etc/profile (ou
l'équivalent pour ubuntu) pour que les deux environnements (local et
distant) soient identiques (Même PATH, mêmes variables d'environnement,
... ) voire, éventuellement et si nécessaire, faire en sorte que
l'utilisateur local et l'utilisateur distant partagent un même UID.
Bref, tout est possible et l'utilité de telle ou telle manip dépendra du
cas.

m'enfin, peut-être que mon pb vient aussi de l'adresse IPV6 qui change
tout le temps sur le seveur distant où je ne suis pas parvenu à la fixer.



À mon avis il n'y a aucun rapport mais comme on n'a pas accès à ton
script, difficile d'être catégorique.

--
Doug - Linux user #307925 - Slackware64 roulaize ;-)
Without freedom of choice there is no creativity.
-- Kirk, "The return of the Archons", stardate 3157.4
Avatar
Une Bévue
Le 18/11/12 00:45, Doug713705 a écrit :

<snip />

si c'est clair, c'est ce que j'ai pensé aussi.
si j'ai posté c'est parce que j'ai fait -une fois- la manip et j'ai eu
un message d'erreur* au niveau scp.



Quel message d'erreur ? Donne nous _toutes_ les informations d'un coup,
il sera plus simple de t'aider.




oui, bien sûr, je vais reconnecter ça et filer le message d'erreur exact,.


<snip />



Si l'environnement n'est pas le même c'est simplement qu'ils n'ont pas
été configuré de la même manière !À toi d'éditer /etc/profile (ou
l'équivalent pour ubuntu) pour que les deux environnements (local et
distant) soient identiques (Même PATH, mêmes variables d'environnement,
... ) voire, éventuellement et si nécessaire, faire en sorte que
l'utilisateur local et l'utilisateur distant partagent un même UID.
Bref, tout est possible et l'utilité de telle ou telle manip dépendra du
cas.




Ah ben c'est ce que j'ai fait étant propriétaire des deux machines...
ce que je voulais dire c'est un même script disons "script.sh" sur une
même machine s'il est lancé en local par /path/to/script.sh ou en ssh
depuis une machine distante par ssh '/path/to/script.sh'
n'est pas exactement dans le même environnement.

m'enfin, peut-être que mon pb vient aussi de l'adresse IPV6 qui change
tout le temps sur le seveur distant où je ne suis pas parvenu à la fixer.



À mon avis il n'y a aucun rapport mais comme on n'a pas accès à ton
script, difficile d'être catégorique.



ben dans mon script il n'y a qu'une ligne pour faire le scp c'est juste ça :

scp -r /path/to/folder /path/to/file :path/to

une seule ligne parmis les 1400 autres.

ce matin je réduis ça à un exemple le plus simple possible pour
éclaircir ça.
Avatar
Une Bévue
Le 18/11/2012 00:45, Doug713705 a écrit :
À mon avis il n'y a aucun rapport mais comme on n'a pas accès à ton
script, difficile d'être catégorique.



bon j'ai fait une petite simulation, problème, je n'ai aucun message
d'erreur ET, il ne se passe rien apparemment, je veux dire pas de
fichiers transférés même si j'entends une activité disk sur le server.
Là pour cette manip client et server sont côte-à-côte.

Le script client "scp_client_test.zsh" :

#!/usr/bin/zsh

RMT_SCRIPT="/Users/yt/Sites/Recettes_tools/scp_server_test.zsh"

echo "ssh iMac '${RMT_SCRIPT}'"

ssh iMac '${RMT_SCRIPT}'

exit 0

Le script server "scp_server_test.zsh" :

#!/usr/local/bin/zsh

LOC_DIR="${HOME}/Sites/Recettes/Entree/Tarte-flambee-alsacienne_fichiers"
LOC_FILE="${HOME}/Sites/Recettes/Entree/Tarte-flambee-alsacienne.html"
RMT_DIR="Sites/Recettes/Entree"

echo "scp -r ${LOC_DIR} ${LOC_FILE} dell-par:${RMT_DIR}"

scp -r ${LOC_DIR} ${LOC_FILE} dell-par:${RMT_DIR}

exit 0
Avatar
Une Bévue
Le 18/11/2012 09:24, Une Bévue a écrit :
Le 18/11/2012 00:45, Doug713705 a écrit :
À mon avis il n'y a aucun rapport mais comme on n'a pas accès à ton
script, difficile d'être catégorique.



bon j'ai fait une petite simulation, problème, je n'ai aucun message
d'erreur ET, il ne se passe rien apparemment, je veux dire pas de
fichiers transférés même si j'entends une activité disk sur le server.
Là pour cette manip client et server sont côte-à-côte.

Le script client "scp_client_test.zsh" :

#!/usr/bin/zsh

RMT_SCRIPT="/Users/yt/Sites/Recettes_tools/scp_server_test.zsh"

echo "ssh iMac '${RMT_SCRIPT}'"

ssh iMac '${RMT_SCRIPT}'

exit 0

Le script server "scp_server_test.zsh" :

#!/usr/local/bin/zsh

LOC_DIR="${HOME}/Sites/Recettes/Entree/Tarte-flambee-alsacienne_fichiers"
LOC_FILE="${HOME}/Sites/Recettes/Entree/Tarte-flambee-alsacienne.html"
RMT_DIR="Sites/Recettes/Entree"

echo "scp -r ${LOC_DIR} ${LOC_FILE} dell-par:${RMT_DIR}"

scp -r ${LOC_DIR} ${LOC_FILE} dell-par:${RMT_DIR}

exit 0




euh j'ai oublié de donner la commande utilisée :
$ ./scp_client_test.zsh
ssh iMac '/Users/yt/Sites/Recettes_tools/scp_server_test.zsh'
$

il est à noter que je n'ai même pas l'echo du server.
Avatar
Doug713705
Le 18-11-2012, Une Bévue nous expliquait dans fr.comp.os.linux.configuration :
Le 18/11/2012 00:45, Doug713705 a écrit :
À mon avis il n'y a aucun rapport mais comme on n'a pas accès à ton
script, difficile d'être catégorique.



bon j'ai fait une petite simulation, problème, je n'ai aucun message
d'erreur ET, il ne se passe rien apparemment, je veux dire pas de
fichiers transférés même si j'entends une activité disk sur le server.
Là pour cette manip client et server sont côte-à-côte.

Le script client "scp_client_test.zsh" :

#!/usr/bin/zsh

RMT_SCRIPT="/Users/yt/Sites/Recettes_tools/scp_server_test.zsh"

echo "ssh iMac '${RMT_SCRIPT}'"

ssh iMac '${RMT_SCRIPT}'

exit 0

Le script server "scp_server_test.zsh" :

#!/usr/local/bin/zsh

LOC_DIR="${HOME}/Sites/Recettes/Entree/Tarte-flambee-alsacienne_fichiers"
LOC_FILE="${HOME}/Sites/Recettes/Entree/Tarte-flambee-alsacienne.html"
RMT_DIR="Sites/Recettes/Entree"

echo "scp -r ${LOC_DIR} ${LOC_FILE} dell-par:${RMT_DIR}"

scp -r ${LOC_DIR} ${LOC_FILE} dell-par:${RMT_DIR}

exit 0



Si je comprends bien, tu te connectes sur le serveur (iMac) pour qu'il
lance un script qui va t'envoyer des fichiers par scp. J'ai bon ?

Si oui, pourquoi ne pas récupérer _directement_ les fichiers depuis le
serveur ? C'est beaucoup plus simple et logique.

Par ailleurs, ne manque t-il pas au moins le premier / dans RMT_DIR ?

--
Doug - Linux user #307925 - Slackware64 roulaize ;-)
Without freedom of choice there is no creativity.
-- Kirk, "The return of the Archons", stardate 3157.4
Avatar
Une Bévue
Le 18/11/2012 10:22, Doug713705 a écrit :
Si je comprends bien, tu te connectes sur le serveur (iMac) pour qu'il
lance un script qui va t'envoyer des fichiers par scp. J'ai bon ?



NON, bon aujourd'hui mon laptop et mon desktop sont côte à côté, mais
généralement, ce n'est pas le cas.

donc je ne peux pas faire un scp vers mon portable depuis le desktop,
quand je ne suis pas devant le desktop,.

et aussi le script fait un tas de trucs, je ne connais pas à l'avance le
nom des fichiers/dossiers.

Si oui, pourquoi ne pas récupérer_directement_ les fichiers depuis le
serveur ? C'est beaucoup plus simple et logique.



voir ci-dessus.

Par ailleurs, ne manque t-il pas au moins le premier / dans RMT_DIR ?



non, parce que si je mets un / le répertoire n'existe pas, sans ce / scp
déverse dans $HOME/ de toutes façons, ce qui est le bon répertoire.
1 2 3