2016-06-30 20 views
8

Tôi đang kết nối với máy chủ Linux từ ứng dụng .net của mình bằng SSH.NET. Mỗi lệnh mà tôi thực hiện hoàn thành như mong đợi với ngoại lệ của pbrun su - myaccount..NET SSH pbrun su

Trong khi gỡ lỗi, khi lệnh pbrun su - myaccount được thực thi, mũi tên trong trình gỡ lỗi biến mất và điều khiển không bao giờ được trả về studio trực quan, do đó yêu cầu tôi ngừng gỡ lỗi ứng dụng theo cách thủ công.

+0

Lệnh 'lệnh su' có lẽ chờ đợi một mật khẩu. Nếu bạn đang xem xét stdout, bạn sẽ không thấy điều này, bởi vì dấu nhắc 'Password:' được gửi tới stderr. Trong [this] (http://stackoverflow.com/questions/30079526/how-to-write-to-stdin-read-from-stdout-of-an-ssh-connected-remote-process-renc#36360010) bài đăng bạn có thể se haw để viết vào shell stdin. – AxelWass

+0

@AxelWass Tại sao nó mong đợi một mật khẩu nếu một người không được nhắc hoặc yêu cầu khi chạy lệnh pbrun su tương tự trong thiết bị đầu cuối? – HendPro12

+0

Tôi đoán ở đây, nhưng có lẽ người dùng ssh và người dùng cục bộ không giống nhau? Có thể sử dụng 'sudo visudo' giúp như [ở đây] (http://askubuntu.com/questions/470383/how-to-avoid-prompt-password-for-sudo#470466). – AxelWass

Trả lời

1

Nếu vấn đề là pbrun đang yêu cầu điều gì đó trong stdin (mật khẩu, lý do, v.v.) bạn có thể tạo một trình bao với các luồng được điều khiển bởi bạn và viết vào đó.

ví dụ đơn giản:

using System; 
using System.Text; 

namespace ConsoleApplication1 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      var connectionInfo = new Renci.SshNet.PasswordConnectionInfo("ancardia.us.to", "adom", "adom"); 
      var ssh = new Renci.SshNet.SshClient(connectionInfo); 

      ssh.Connect(); 

      var shell = ssh.CreateShell(Console.OpenStandardInput(), Console.OpenStandardOutput(), Console.OpenStandardOutput()); 
      shell.Start(); 

     while (true) { 
      Console.Read(); 
      } 

     } 


    } 
} 

enter image description here

+0

Tôi đã sử dụng ví dụ của bạn với các chi tiết máy chủ của tôi và nó cho thấy thiết bị đầu cuối từ xa trong bảng điều khiển. Tuy nhiên, như đã giải thích trước đây, khi tôi thực thi lệnh pbrun su - myaccount, nó thay đổi thành công người dùng và không cần mật khẩu, – HendPro12