quelles sont les différences exactes entre jsch ChannelExec et ChannelShell?
Quelqu'un peut me dire les différences entreChannelExec
& ChannelShell
?
Juste pour s'assurer que sur la première phrase: saviez-vous de la manuel dans le wiki mon Javadoc? Les exemples ne sont pas vraiment clair à ce sujet, si vous n'avez pas lu les RFC.
OriginalL'auteur Han Zheng | 2011-06-07
Vous devez vous connecter pour publier un commentaire.
La coquille et exec canaux sont assez semblables, à la fois exécuter des commandes avec le shell distant (au moins sur le plan conceptuel - le serveur peut être configuré afin de les traiter différemment des autres, bien sûr). RFC 4254 groupes dans le la section "Sessions Interactives", et ils ont tous les deux (ainsi que sous-système, voir ci-dessous) utiliser le canal de type "session" dans le protocole SSH.
Il y a une différence importante:
Pour
ChannelShell
, le flux d'entrée fournit à la fois les commandes et la saisie de ces commandes. C'est comme à l'aide d'un shell interactif sur votre ordinateur local. (Et il est normalement utilisé juste pour ça: l'utilisation interactive.)Pour
ChannelExec
, les ordres sont donnés avec setCommand() avantconnect()
, et le flux d'entrée sera envoyé à ces commandes en tant qu'entrée. (Le plus souvent, vous aurez une seule commande, mais vous pouvez fournir plusieurs à l'aide de l'normale shell séparateurs&
,&&
,|
,||
,;
, de retour à la ligne, et composé des commandes.) C'est comme de l'exécution d'un script shell sur votre ordinateur local. (Bien sûr, si l'une des commandes est lui-même un shell interactif, cela va se comporter comme unChannelShell
.)Il y a une troisième similaire,
ChannelSubsystem
, qui exécute un sous-système du serveur ssh - ici la configuration du serveur décide quoi faire, pas la distance de l'utilisateur du shell. (Le plus souvent utilisées au sous-système estsftp
, mais pour ce JSch fournit une chaîne spécialisée, qui comprend le protocole.)Avant de lire les Rfc, essayez de lire le JSch manuel - elle est plus courte, et plus JSch spécifiques. Aussi, vous avez seulement besoin de la vue d'ensemble RFC 5251, pas les détails techniques du protocole, je pense.
OriginalL'auteur Paŭlo Ebermann
Il y a encore une autre différence importante entre exec canal et shell canal: La coquille d'un canal d'établir l'environnement de shell, par exemple, les variables d'environnement, tandis que l'exec canal ne sera pas.
OriginalL'auteur Jamie
Exec canal ne prend en charge Kch commandes, par exemple,
ls -l
. Si vous essayez d'exécuter n'importe quel environnement de travail, il renvoie une erreur commeksh: run_pass: not found
OriginalL'auteur Laxmi Baghel