Question

Ce n'est pas vraiment une question de programmation, mais elle concerne beaucoup de programmeurs ...

Supposons que j'ai ouvert une session SSH sur un autre ordinateur.

  

remote: html avalys $ ls
  welcome.msg index.html readme.txt
  html avalys $ à distance

Existe-t-il une commande que je peux taper dans mon shell distant qui transférera immédiatement l'un des fichiers du répertoire actuel (par exemple, welcome.msg) sur mon ordinateur local, par exemple.

  

remote: html avalys $ stransfer welcome.msg
  Récupérer /home/avalys/html/welcome.msg à welcome.msg
  /home/avalys/html/welcome.msg 100% 23KB 23.3KB / s 00:00
  html avalys $ à distance

Le seul moyen que je connaisse pour ce faire est d'ouvrir une session SFTP parallèle et un CD dans mon répertoire actuel de la session SSH, qui est un véritable PITA lors de l'administration à distance d'un serveur.

EDIT: Je suis conscient de la possibilité d’utiliser une connexion sftp / scp inversée, mais cela implique davantage de frappe. Ce serait formidable si je pouvais taper simplement le nom d’une commande (par exemple, "stransfer"), le ou les fichiers que je veux transférer, et le faire fonctionner "Just Work".

Était-ce utile?

La solution

Vous pouvez configurer une telle connexion de transfert inversée avec / ssh -Port: 127.0.0.1: 22 utilisateur @ hôte pour scp back.

Utilisez l'utilisateur scp @ hôte: port pour y accéder.

Autres conseils

Lors de mes recherches, j'ai trouvé un programme qui remplaçait directement le client openssh, zssh.

sudo apt-get install zssh
zssh user@remote
sudo apt-get install zssh
sz file.name
<ctrl>+<space>
rz

Fonctionne comme un charme.

Voici ma solution préférée à ce problème [comme indiqué dans une question en double que j'ai posée]. Configurez un tunnel SSH inverse lors de la création de la session SSH. Cela est facilité par deux fonctions bash: grabfrom () doit être défini sur l'hôte local, tandis que grab () doit être défini sur l'hôte distant. Vous pouvez ajouter toute autre variable ssh que vous utilisez (par exemple -X ou -Y) comme bon vous semble.

function grabfrom() { ssh -R 2202:127.0.0.1:22 ${@}; };
function grab() { scp -P 2202 $@ localuser@127.0.0.1:~; };

Utilisation:

localhost% grabfrom remoteuser@remotehost
password: <remote password goes here>
remotehost% grab somefile1 somefile2 *.txt
password: <local password goes here>

Positifs:

  • Il fonctionne sans logiciel spécial sur l'un de ses hôtes au-delà d'OpenSSH
  • Cela fonctionne quand l'hôte local est derrière un routeur NAT
  • Il peut être implémenté comme une paire de deux fonctions bash sur une ligne

Négatifs:

  • Il utilise un numéro de port fixe pour:
    • ne fonctionnera pas avec plusieurs connexions à l'hôte distant
    • peut entrer en conflit avec un processus utilisant ce port sur l'hôte distant
  • Il faut que localhost accepte les connexions ssh
  • Il faut une commande spéciale pour lancer la session
  • Il ne gère pas implicitement l'authentification auprès de l'hôte local
  • Cela ne permet pas de spécifier le répertoire de destination sur localhost
  • Si vous récupérez plusieurs hôtes locaux sur le même hôte distant, ssh n'appréciera pas le changement de clé

Travaux futurs: C'est quand même assez kludgy. De toute évidence, il serait possible de gérer le problème d'authentification en configurant les clés ssh de manière appropriée et il est encore plus facile d'autoriser la spécification d'un répertoire distant en ajoutant un paramètre à grab ()

Il est plus difficile d’aborder les autres aspects négatifs. Ce serait bien de choisir un port dynamique, mais pour autant que je sache, il n’existe aucun moyen élégant de transmettre ce port au shell de l’hôte distant; Autant que je sache, OpenSSH ne vous permet pas de définir des variables d'environnement arbitraires sur l'hôte distant et bash ne peut pas prendre de variables d'environnement à partir d'un argument de ligne de commande. Même si vous pouviez choisir un port dynamique, il n’ya aucun moyen de s’assurer qu’il n’est pas utilisé sur l’hôte distant sans se connecter au préalable.

Vous pouvez monter une connexion ssh avec sshfs. De cette façon, vous pouvez transférer des fichiers au sein de la même connexion ssh, tout en utilisant le client ssh de votre choix. Vous pouvez même le configurer sur montage automatique si vous le souhaitez.

Si vous souhaitez corriger certaines choses (cet IMHO ne devrait pas l'être), consultez ssh-xfer

Vous pourriez écrire un script bash appelé stransfer qui prendrait un argument de nom de fichier, puis interjecterait le nom de fichier dans la commande scp, en supposant que le serveur et le chemin des fichiers sur le serveur ne changent pas.

Si le fichier est toujours identique, vous pouvez créer un alias dans votre fichier ~ / .bashrc.

alias getwelcome = 'scp avalys @ remotehost: /home/avalys/html/welcome.msg.'

J'ai eu la même pensée que Paul Tomblin a écrit dans un commentaire à la question. Les anciennes sessions de terminal utilisaient des protocoles et des outils de modem x, y et z-modem ( sz et rz pour les variantes de z-modem). Je ne sais pas si cela fonctionnera lors d'une session SSH, mais cela vaut peut-être la peine d'essayer.

Fink fournit un package lrzsz avec cet outil sous Mac OS X.

Faire de ce wiki une communauté parce que je me sentirais mal d’avoir un représentant après que Paul soit arrivé le premier ...

À l’école, si je transfère un fichier d’un système Linux à un autre, j’utilise généralement ssh à distance, puis l’utilisation de scp pour transférer le fichier du système distant à mon ordinateur. Vous ne savez pas si c'est ce que vous recherchez ou si cela s'applique même dans votre cas, mais c'est généralement ma façon de contourner le problème en ouvrant une autre fenêtre de terminal.

Juste pour préciser si vous n'êtes pas familier avec scp, vous devrez tout de même spécifier l'emplacement de votre choix pour placer le fichier sur votre ordinateur. Pour moi, de toute façon, il s'agit généralement d'une chose plus facile à retenir que l'emplacement du fichier. sur l'ordinateur distant. Voici un lien qui peut être utile: http://www.computerhope.com/unix/scp .htm

https://superuser.com/questions/259481/reverse-scp-over-ssh -connection

sftp server
get file.txt

Apparemment, vous pouvez également parcourir n éléments dans la console sftp, et obtenir prend un chemin de fichier complet. Copies dans le répertoire à partir duquel vous avez exécuté sftp .

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top