2009-11-20 10 views
5

Est-il possible de ssh dans Windows (via un sshd cygwin) et de démarrer un programme sur un bureau de l'utilisateur Windows connecté? Autrement dit, un utilisateur ABC est connecté sur Windows et un utilisateur distant se connecte avec le login/mot de passe d'ABC sur ssh, ABC distant peut-il faire apparaître une application sur le bureau de l'utilisateur ABC local?Est-il possible de ssh dans Windows (via un sshd cygwin) et de démarrer un programme sur un bureau de l'utilisateur Windows connecté?

Je pose cette question sur Stackoverflow et non sur Serverfault car la motivation pour le faire est de nature programmatique. L'appel distant proviendra d'une machine Linux, alors qu'il peut être possible (?) De le faire en utilisant WMI ou une autre approche, ssh semble être le plus simple.

Heureux d'entendre des alternatives plus simples et meilleures.

Merci!

Répondre

1

Si votre cygwin sshd s'exécute sous un compte privilégié, il peut obtenir un handle pour le bureau actuel et y placer des fenêtres. Voir le paramètre de bureau de STARTUPINFO pour CreateProcess.

+0

Ah, merci cela ressemble à un bon point de départ. – Atlas1j

1

Ma propre solution. Testé sur Windows XP (mais je pense qu'il devrait fonctionner dans n'importe quel environnement Windows avec un petit effort). Vous devez utiliser la commande psexec et quser.

D'abord, mettre psexec et quser dans un répertoire inclus dans PATH la variable d'environnement du Cygwin. Il suffit de copier ces fichiers dans le répertoire bin sous cygwin.

Vous pouvez trouver le quser.exe dans votre % system32% \ dllcache dir. Mais pour une raison quelconque, je ne peux pas y accéder (ou accéder au répertoire mentionné) via les commandes cygwin (ie, ls, cp, etc.), donc j'ai fait une copie en utilisant la commande copy de microsoft dans le dossier cygwin \ bin.

Notes: Je pense qu'il est utile d'avoir la suite psutils dans le dossier bin de cygwin. La première fois que vous exécutez l'un de ces utilitaires, vous devez accepter un accord de licence de Microsoft, alors lancez psexec depuis l'explorateur Windows la première fois.

Ensuite, créez ces alias dans votre fichier .bash_profile:

alias winrun='psexec \\\\YOU_USERNAME_HERE -d -i `quser | grep YOU_USERNAME_HERE | grep console | awk "{print \\\$3}"`' 
alias explorethis='winrun explorer $(cygpath -w `pwd`)' 

Rappelez-vous que vous devez traduire le répertoire courant en utilisant cygpath si vous devez passer comme argument d'une commande (« explorethis » est un exemple de cela).