Disons que je me suis connecté à un ordinateur distant via SSH. À partir d'un programme sur cet ordinateur distant, j'ai besoin d'exécuter une commande sur mon ordinateur local (l'initiateur de connexion).
Ce qui soulève la question: est-il possible de sangsue sur la connexion existante entre les deux ordinateurs pour exécuter une commande sur l'ordinateur local?
J'ai envisagé d'exécuter la commande ssh user@host-of-connecting-party <command>
sur l'ordinateur distant pour établir une connexion inversée. Mais cela est plus difficile à automatiser et nécessitera l'intervention de l'utilisateur. J'espérais pouvoir l'automatiser complètement, ou au moins détecter l'utilisateur / nom d'hôte de l'utilisateur connecté.
ssh
remote-access
Aeyoun
la source
la source
Réponses:
J'ai parfois un besoin similaire, tant que je me connecte via Putty à notre serveur VPN et à partir de là via ssh vers un autre hôte, ce qui n'est pas accessible pour moi directement en raison de la configuration VPN.
Parfois, j'ai juste besoin de vérifier rapidement quelque chose sur une machine serveur VPN, tout en ayant ma "ssh-session" en cours d'exécution. Une approche consiste à exécuter une session ssh sous
screen
, qui, comme je l'ai remarqué, ajoute un peu de retard par rapport à "ssh ordinaire". Une autre approche, que j'aimerais partager ici, est la suivante:En session SSH, appuyez sur Enter, puis ~, (assurez-vous qu'il ne s'affiche pas, c'est-à-dire que vous êtes en mode commande), puis Ctrl- Z. Cela mettra le processus client ssh sur un "hôte" en arrière-plan, et vous aurez quelque chose comme:
Maintenant que vous êtes sur "l'hôte", vous pouvez faire ce que vous voulez (bien que je ne sais pas combien de temps la session ssh sera maintenue en vie), puis revenir à la session SSH en exécutant
fg
.Au moins, cela fonctionne pour moi lorsque je suis connecté à partir d'un poste de travail Win10 via Putty sur une machine virtuelle CentOS, et à partir de cette machine virtuelle, connectez-vous via SSH à un autre hôte.
J'espère que cela aide quelqu'un!
la source
PermitLocalCommand yes
dans votre.ssh/config
un hôte, vous pouvez aussi le faire<Enter>~C
, alors!<command>
.La réponse de @ 62mkv est une bien meilleure solution. Utiliser ça.
Par souci d'exhaustivité et de curiosité cependant, si vous avez un serveur ssh en cours d'exécution sur votre machine locale, vous pouvez créer un tunnel ssh pour autoriser les connexions ssh de l'hôte distant sur le port 20202 vers le local sur le port 22. Exemple de commande:
Cela va démarrer une connexion ssh, mais également configurer un tunnel vers le serveur ssh exécuté sur votre machine. Ensuite, vous pouvez le faire, lorsque ssh'ed dans l'hôte distant:
Bien sûr, cela peut rapidement devenir déroutant - surtout si la technique est imbriquée plus d'une fois. Cela ajoute également un peu de latence - car tout ce que vous exécutez sur votre machine locale est renvoyé via l'hôte distant.
Des informations supplémentaires sur le tunneling ssh pour ceux dont la curiosité n'est pas encore satisfaite peuvent être trouvées en réponse à cette question d'échange de pile unix .
la source
Si votre ordinateur local et distant sont accessibles à partir d'Internet, vous pouvez simplement ouvrir une session SSH à partir de votre ordinateur local sur l'ordinateur distant, puis dans cette session, ouvrir une autre session ssh à partir de l'ordinateur distant sur l'ordinateur local:
Pour automatiser les choses, jetez un œil à Fabric (connaissances Python requises)
la source
Vous pouvez utiliser sshpass pour vous connecter à l'ordinateur distant et exécuter les commandes.
Utilisez un script shell simple sur l'ordinateur local et utilisez le code ci-dessus chaque fois que vous souhaitez exécuter des commandes sur un ordinateur distant. C'est l'un des moyens que j'utilise généralement dans l'automatisation.
la source
Non, vous ne pouvez pas pénétrer dans la session existante.
Votre application aurait besoin d'un moyen de se reconnecter au client. SSH fonctionnerait si le client avait un serveur SSH en cours d'exécution et que le serveur pouvait atteindre le port 22 sur le client. Il ne serait pas difficile d'automatiser si vous utilisiez l'authentification par clé au lieu de l'authentification par mot de passe - de cette façon, l'intervention de l'utilisateur ne serait pas nécessaire.
Des informations sur la configuration de l'authentification basée sur les clés sont disponibles ici: http://tombuntu.com/index.php/2008/02/20/public-key-authentication-for-ssh-made-easy/
la source
Si vous avez accès à un autre terminal, vous pouvez envoyer SIGSTOP en utilisant "kill -19 PID" à la commande ssh qui a initié la connexion. Vous obtiendrez alors le contrôle du terminal sur le terminal de la machine cliente. Une fois que vous avez terminé, vous pouvez restaurer la connexion ssh en tapant simplement fg pour réveiller le client ssh.
Mais bien sûr, la question est la suivante: si vous avez déjà un terminal sur la machine client, pourquoi le feriez-vous :)
la source