C#学习教程:是否可以使用SSH.NET从单个登录会话执行多个SSH命令?分享


是否可以使用SSH.NET从单个登录会话执行多个SSH命令?

我正在使用带有SSH.NET的C#,并且能够使客户端SSH连接正常工作,以便跨SSH执行命令。 我可以连接到虚拟机管理程序VM上的Linux安装,没有任何问题,读回StdOut和StdErr等。

但是,每个命令都像一个全新的会话 – 它始终从/home/user ,即使您使用最后一个命令从另一个目录完成。 您可以使用分号将多个命令串起来:

 pwd; cd ..; pwd 
 /home/user /home 

但是如果我执行:

 pwd 
 /home/user 

我回到了该用户的主目录。

我没有断开和关闭命令之间的会话。 以下是连续几个命令的示例代码,使用路径中的更改来说明问题:

  public void MultiCommandTest() { string output1, output2; var host = Config.SshHostName; var port = Config.SshHostPort; var user = Config.SshUsername; var pass = Config.SshPassword; var auth = new PasswordAuthenticationMethod(user, pass); var info = new ConnectionInfo(host,port,user,auth); using (var ssh = new SshClient(info)) { ssh.Connect(); var cmd1 = ssh.CreateCommand("pwd; cd ..; pwd"); output1 = cmd1.Execute(); var cmd2 = ssh.CreateCommand("pwd; cd ..; pwd"); output2 = cmd2.Execute(); ssh.Disconnect(); } string output = output1 + Environment.NewLine + output2; System.Windows.Forms.Clipboard.SetText(output); System.Windows.Forms.MessageBox.Show(output); } 

我发现在连接到Bash等时,交互式和非交互式会话之间存在差异,但对linux等知之甚少,以了解它是否可以成为解决方案的一部分(也许它必须是使用.profile.bashrc或类似方法在登录端解决?)。

题:

那么 – 有没有办法与SSH(特别是SSH.NET)建立类似shell的连接? 或者我只需要序列化任何命令集并立即发送它们,总是从头开始为任何新命令?

您可以使用以下命令实现shell会话:


但实际上不建议使用“shell”来自动执行命令。 shell是一种交互式function,没有确定性行为。

您最好使用exec通道,请参阅如何在C#中的SSH服务器上运行命令?

上述就是C#学习教程:是否可以使用SSH.NET从单个登录会话执行多个SSH命令?分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—猴子技术宅(www.ssfiction.com)

本文来自网络收集,不代表猴子技术宅立场,如涉及侵权请点击右边联系管理员删除。

如若转载,请注明出处:https://www.ssfiction.com/ckf/959915.html

发表评论

邮箱地址不会被公开。 必填项已用*标注