2011-06-07 14 views
8

ojalá no estoy cometiendo un error rtfm.¿cuáles son las diferencias exactas entre jsch ChannelExec y ChannelShell?

¿Puede alguien decirme las diferencias de detalle entre el remolque.

+0

Solo para estar seguro de la primera frase: ¿sabía usted del [manual en la wiki] (http://sourceforge.net/apps/mediawiki/jsch/index.php?title=Manual), y mi [ Javadoc] (http://epaul.github.com/jsch-documentation/simple.javadoc/)? Los ejemplos no son realmente claros sobre esto, si no leyó los RFC. –

Respuesta

15

The shell and exec channels son bastante similares: ambos ejecutan comandos con el shell remoto (al menos, conceptualmente, el servidor puede estar configurado para tratarlos de manera diferente, por supuesto). RFC 4254 los agrupa en el section "Interactive Sessions", y ambos (así como el subsistema, ver más abajo) utilizan el tipo de canal "sesión" en el protocolo SSH.

Hay una diferencia importante:

  • Para ChannelShell, la corriente de entrada dispone de los comandos y de entrada a estos comandos. Esto es como usando un shell interactivo en su computadora local. (Y se utiliza normalmente sólo por eso: uso interactivo.)

  • Para ChannelExec, las órdenes se dan con setCommand() antes de connect(), y la corriente de entrada se enviará a estos comandos como entrada. (Con mayor frecuencia, tendrá sólo un comando, pero puede proporcionar múltiples que utilizan los separadores normales de concha &, &&, |, ||, comandos ;, nueva línea, y compuestas.) Esto es como la ejecución de un script de shell en su computadora local. (Por supuesto, si uno de los sí comandos es un shell interactivo, este se comportará como un ChannelShell.)

  • hay un tercer similar, ChannelSubsystem, que ejecuta un subsistema del servidor ssh - aquí la configuración del servidor decide qué hacer, no el shell del usuario remoto. (El subsistema más a menudo utilizado es sftp, pero para este JSch proporciona un canal especializado, que entiende el protocolo.)

+0

gracias. Me pasó a usar jsch hace varios días. Obviamente, tengo muchas cosas que aprender. Leeré los RFC. ¡Gracias por tu ayuda! –

+2

Antes de leer los RFC, intente leer el [Manual de JSch] (http://sourceforge.net/apps/mediawiki/jsch/index.php?title=Manual) - es más corto y más específico de JSch. Además, solo necesita la descripción general [RFC 5251] (http://tools.ietf.org/html/rfc4251), no los detalles técnicos del protocolo, creo. –

0

todavía hay una diferencia más importante entre el canal exec y el canal shell: El canal shell establecerá el entorno de shell, por ejemplo, las variables de entorno, mientras que el canal de ejecución no.

Cuestiones relacionadas