public int Execute(string command, Stream stdin = null, Stream stdout = null, Stream stderr = null, int timeout = 0, bool throwOnNonZero = false) { SshCommand sshCommand = sshClient.CreateCommand(command); if (timeout > 0) { sshCommand.CommandTimeout = new TimeSpan(0, 0, 0, 0, timeout); } IAsyncResult execResult = sshCommand.BeginExecute(null, null, stdout, stderr); if (stdin != null) { try { stdin.Seek(0, SeekOrigin.Begin); } catch { // no-op } sshCommand.SendData(stdin); } sshCommand.EndExecute(execResult); if (sshCommand.ExitStatus != 0 && throwOnNonZero) { throw new SshClientException(string.Format("Shell command \"{0}\" returned exit code {1} {2}", command, sshCommand.ExitStatus, sshCommand.Error)); } #if DEBUG Debug.WriteLine(string.Format("{0} # exit code {1}", command, sshCommand.ExitStatus)); #endif return(sshCommand.ExitStatus); }