stdout
sur un serveur CentOS doit être connecté à stdin
un autre serveur CentOS. Est-ce possible?
Mise à jour
ScottPack, MikeyB et jofel ont tous des réponses valables. J'ai attribué la réponse à Scott car, même si ma question ne mentionnait pas la sécurité comme une exigence, il est toujours agréable d'être en sécurité. Cependant, les suggestions des deux autres boursiers fonctionneront également.
Réponses:
C'est un oui sans reproche.
Lorsque l’on
ssh
exécute une commande sur un serveur distant, il effectue une sorte de redirection interne sophistiquée des entrées / sorties. En fait, j'estime qu'il s'agit d'une des fonctionnalités légèrement plus agréables d'OpenSSH. Plus précisément, si vous utilisezssh
pour exécuter une commande arbitraire sur un système distant, puis ssh la carteSTDIN
etSTDOUT
à celle de la commande en cours d' exécution.Supposons, à titre d'exemple, que vous souhaitiez créer une archive tar de sauvegarde, mais que vous ne vouliez pas ou ne puissiez pas la stocker localement. Jetons un coup d'oeil à cette syntaxe:
Nous créons une archive et l'écrivons dans
STDOUT
des choses normales. Puisque nous utilisons ssh pour exécuter une commande à distance, STDIN est mappé sur leSTDIN
decat
. Que nous redirigeons ensuite vers un fichier.la source
netcat
les deux extrémités constituent un excellent canal de communication simple et facile.tar cf - /path/to/dir | nc 1.2.3.4 5000
sur un serveur,nc -l -p 5000 > backupfile.tar
sur l'autre.Un moyen pratique de canaliser les données entre les hôtes lorsque vous n'avez pas à vous soucier de la sécurité sur le fil consiste à utiliser
netcat
les deux extrémités de la connexion.Cela vous permet également de les configurer de manière asynchrone:
Sur le "récepteur" (en réalité, vous aurez une communication bidirectionnelle, mais il est plus facile de penser comme ça), lancez:
Et sur "l'expéditeur", lancez:
la source
Un outil très puissant pour créer des connexions uni- et bidirectionnelles est
socat
. Pour un bref aperçu des possibilités, consultez les exemples de la page de manuel .Il remplace
netcat
complètement les outils similaires et prend en charge les connexions cryptées SSL. Pour les débutants, ce n’est peut-être pas assez simple, mais il est au moins bon de savoir qu’il existe.la source
TL; DR
Les choses deviennent un peu plus compliquées lorsque vous avez un serveur bastion à utiliser.
Vous pouvez passer
ssh
comme commande pourssh
aimer ainsi:cat local_script.sh | ssh -A usera@bastion ssh -A userb@privateserver "cat > remote_copy_of_local_script.sh; bash remote_copy_of_local_script.sh"
Attention aux pseudo-terminaux
Notez que le point essentiel ici est que
ssh
, comme la plupart des outils, traitestdout
etstdin
corrige par défaut.Cependant, lorsque vous commencez à voir des options telles que
Disable pseudo-terminal allocation.
etForce pseudo-terminal allocation.
vous devrez peut-être faire quelques essais et erreurs. Mais, en règle générale, vous ne voulez pas modifier letty
comportement sauf si vous essayez de réparer les fichiers illisibles / binaires dans un émulateur de terminal (dans lequel un type humain est entré).Par exemple, j’ai tendance à utiliser
-At
pour que le ssh-agent de mon poste de travail soit transféré et pour que l’exécution de tmux à distance ne soit pas synonyme de binaire (comme c’est le casssh -At bastion.internal tmux -L bruno attach
). Et pour docker aussi (comme çasudo docker exec -it jenkins bash
).Cependant, ces deux
-t
indicateurs rendent difficile la traçabilité de la corruption des données lorsque j'essaie de faire quelque chose comme ceci:la source
Essayez de mettre votre clé publique ssh dans un autre hôte par une seule commande
la source
Je trouve que c'est le plus simple. Après avoir configuré aucun protocole de transfert de mot de passe entre serveurs pour l'utilisateur pour lequel vous exécutez la commande, procédez comme suit:
Non compressé
Compression à la volée
la source
ssh
est déjà configuré pour la compression.Compression
peut être défini dans l’un des fichiers de configuration, une vérification rapide consiste à vérifier sissh -v localhost exit 2>&1 | fgrep -i compress
une sortie est donnée (autant que je sache, il n’ya pas d’option permettant de vider la configuration telle que ssh l’a lue).tar
a un-C path
drapeau qui fonctionne pour les commandesc
etx
. Vous n'êtes pas obligé de mettre unecd
commande séparée là-bas. (Mais il est bon de noter que vous pouvez exécuter plus d'une commande.)-C
est une extension GNU (bien que maintenant aussi supporté par bsdtar et schily tar)