SsH.net 编程小记和一个小坑

情景如下:
两个进程要运行在服务端,客户对这个linux毫不熟悉,因此想在window端做一个远程进程监控的小工具,网搜之后,找到了Renci.SshNet. 参考了https://blog.youkuaiyun.com/qq_17486399/article/details/117435385,使用很简单.核心代码如下:

       public static string RunSSHCommands(string host, string username, string password, string command)
        {
            var retVal = "";
            if (command == null || command.Length == 0)
            {
                getSSHLog("指令为空!");
            }
            try
            {
                using (var client = new SshClient(host, username, password))
                {
                    try
                    {
                        client.Connect();
                        //client.KeepAliveInterval = new TimeSpan(0, 10, 4);

                        var cmd = client.RunCommand(command);//.Execute();
                        //client.
                       var result = cmd.Result;
                        var msg = cmd.Error != "" ? " \r\nerror:" + cmd.Error : "";
                        retVal = result + msg;
                        getSSHLog(retVal ); 
                       
                        client.Disconnect();
                    }
                    catch (Exception e)
                    {
                        getSSHLog(e.Message);
                    }
                }
            }
            catch (Exception e)
            {
                getSSHLog(e.Message);
                retVal = e.Message;
            }
            return retVal;
        }
    }

其中的getSSHLog(retVal ) 是log 函数,自己写即可.
注意点如下:
运行多个命令用 ; 隔开即可.
后台运行的shell 命令的写法如下:

nohup ./youApp> output 2>&1 &

注意: 2>&1 的意思是 将标准错误输出改向到标准输出, 最后一个& 表示后台运行, output 记录程序的输出内容,相当于一个log文件.
坑是啥呢? 就是 如果写成如下格式:

nohup ./youApp> /dev/null 1>&2 &

在终端下操作,一样可以后台运行,但是使用ssh.net 的RunCommand 运行就是一个坑了,没有错误信息,也没输出结果,但是进程就是没有执行.笔者由于之前写成了这样的格式,折腾了好几天啊. 其他命令都可以唯独我这个shell不行. 关键是没有任何错误提示啊. 这或许是ssh.net 的一个小bug.
maraSun 2021-01-05 BJFWDQ.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值