2009-11-20 7 views
5

È possibile eseguire l'ssh in Windows (tramite un cygwin sshd) e avviare un programma sul desktop di un utente Windows connesso?È possibile eseguire l'ssh in Windows (tramite un cygwin sshd) e avviare un programma sul desktop di un utente Windows connesso?

In un altro modo, ad esempio un utente ABC ha eseguito l'accesso su Windows e un utente remoto accede con la password di accesso/password di ABC su SSH, l'ABC remoto può far apparire un'app sul desktop dell'utente locale di ABC?

Lo sto chiedendo su StackOverflow e non su Serverfault perché la motivazione per farlo è di natura programmatica. La chiamata remota arriverà da una scatola Linux, quindi mentre è possibile (?) Farlo usando WMI o qualche altro approccio, ssh è sembrato il più semplice.

Felice di ascoltare alternative più semplici/migliori.

Grazie!

risposta

1

Se cygwin sshd è in esecuzione con un account privilegiato, può ottenere un handle per il desktop corrente e inserire finestre su di esso. Vedi il parametro desktop di STARTUPINFO per CreateProcess.

+0

Ah, grazie, sembra un buon punto di partenza. – Atlas1j

1

La mia soluzione. Testato su Windows XP (ma penso che dovrebbe funzionare in qualsiasi ambiente Windows con un piccolo sforzo).

È necessario utilizzare il comando psexec e quser.

In primo luogo, mettere psexec e QUSER in una directory inclusa nella variabile d'ambiente PATH del Cygwin. Basta copiare questi file nella directory bin sotto cygwin.

È possibile trovare il quser.exe nel vostro % system32% \ dllcache dir. Ma per qualsiasi motivo non posso accedere ad esso (o accedere alla directory citata) tramite i comandi cygwin (cioè ls, cp, ecc.), Quindi ho fatto una copia usando il comando di copia di microsoft nella cartella cygwin \ bin.

Note: Penso che sia utile avere psutils bagno tutte nella cartella bin di Cygwin. La prima volta che si esegue una di queste utility sarà necessario accettare un accordo di licenza da Microsoft, quindi eseguire psexec da Windows Explorer la prima volta.

Quindi creare questi alias nel file .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`)' 

Ricordate che è necessario tradurre il directory corrente utilizzando cygpath se è necessario passare come argomento di un comando ("explorethis" è un esempio di questo).