2017-08-16 1 views
0

Disons que je lance les commandes suivantes:Puis-je récupérer localement le cwd d'un shell distant de l'autre côté d'une connexion ssh?

[email protected]:~$ ssh [email protected]:/Documents 
[email protected]:~/Documents$ cd ~/Desktop/ 
[email protected]:~/Desktop$ pwd 
/home/user2/Desktop 

Est-il possible pour moi d'obtenir le chemin/home/user2/Desktop à partir du pid du processus ssh d'un autre processus sur 172.50.50.50?

Je pensais que ce serait peut-être quelque part dans /proc/<SSH PID>/ mais je ne peux pas le comprendre.

+0

avez-vous la permission de lire le répertoire 'proc' d'un autre utilisateur? – Kent

+0

Cette information n'existe pas du tout côté client; Comme le dit la réponse de Toby, le serveur ne l'envoie jamais sur le fil. Cela dit, pourquoi pensez-vous que vous en avez besoin? Il existe de bien meilleures façons de faire tout ce qui peut dépendre de l'information (par exemple, si vous essayez de piloter une session interactive longue distance à partir de la télécommande, arrêtez de le faire * et ouvrez plutôt un nouveau canal sur le même transport pour chaque commande individuelle que vous voulez, en changeant le répertoire comme approprié pour cette commande quand vous le lancez). –

+0

("channel" et "transport" est la terminologie du protocole SSH, mais vous pouvez accéder à la même fonctionnalité avec les boutons de configuration ControlMaster et ControlSocket d'OpenSSH). –

Répondre

1

Non, vous ne pouvez pas.

Le client SSH n'a aucune connaissance du répertoire de travail du serveur. Il n'est transmis nulle part dans le protocole SSH. En fait, le serveur SSH n'a pas besoin de connaître le répertoire de travail du processus (groupe) sur lequel il transfère des caractères. La seule façon d'obtenir ce que vous voulez est d'accéder indépendamment à l'hôte du serveur, de localiser le processus sshd correspondant et le processus enfant particulier, puis d'interroger cet enfant. Il n'est pas trivial de savoir quel processus enfant est pertinent - vous pouvez avoir trois ou quatre shells en premier plan, en arrière-plan ou à l'arrêt, et peut-être certains éditeurs et autres programmes d'application, tous avec des répertoires de travail différents. Lequel de ceux est requis?

+0

Pouvez-vous penser à un moyen d'associer un processus sur le serveur avec un processus sur le client? – Graeme

0

Si vous avez la permission suffisante sur le serveur et connaissez le pid ssh, vous pouvez faire:

ls -l /proc/<SSH PID>/cwd 

le /proc/<pid>/cwd est un lien symbolique, lien vers le processus cwd.

+0

Désolé, j'ai du mal à mettre mon problème en mots. De mon exemple - je veux obtenir le chemin d'un autre processus sur 172.50.50.50. Le 172.50.50.50, '/ proc//cwd' me donne le répertoire dans lequel je me trouvais quand j'ai appelé ssh. – Graeme