У меня проблема в C# при попытке открыть туннель SSH на 127.0.0.1:9999
.
Это мой Program.cs
class Program
{
static void Main(string[] args)
{
Console.WriteLine("Begin");
PlinkTest plink = new PlinkTest();
String feedback = plink.CreateTunnel("1.2.3.4", "user", "user");
Console.WriteLine("THING:" + feedback);
Console.Read();
}
}
Это моя программа, PlinkTest.cs
:
class PlinkTest
{
String PATH_TO_PLINK = @"C:\plink\plink.exe";
public PlinkTest()
{
}
public string RequestInfo(string remoteHost, string userName, string password, string[] lstCommands)
{
m_szFeedback = "Feedback from: " + remoteHost + "\r\n";
// ProcessStartInfo psi = new ProcessStartInfo("echo y | C:\\plink\\plink.exe")
ProcessStartInfo psi = new ProcessStartInfo("C:\\plink\\plink.exe")
{
Arguments = String.Format("-ssh -N -D 9999 [email protected] -pw user -v"),
RedirectStandardError = true,
RedirectStandardOutput = true,
RedirectStandardInput = true,
UseShellExecute = false,
CreateNoWindow = true
};
Process p = Process.Start(psi);
m_objLock = new Object();
m_blnDoRead = true;
AsyncReadFeedback(p.StandardOutput); // start the async read of stdout
AsyncReadFeedback(p.StandardError); // start the async read of stderr
StreamWriter strw = p.StandardInput;
foreach (string cmd in lstCommands)
{
strw.WriteLine(cmd); // send commands
}
strw.WriteLine("exit"); // send exit command at the end
p.WaitForExit(); // block thread until remote operations are done
return m_szFeedback;
}
public string CreateTunnel(string remoteHost, string userName, string password)
{
m_szFeedback = "Feedback from: " + remoteHost + "\r\n";
// ProcessStartInfo psi = new ProcessStartInfo("echo y | C:\\plink\\plink.exe")
ProcessStartInfo psi = new ProcessStartInfo(PATH_TO_PLINK)
{
Arguments = String.Format("-ssh -N -D 9999 [email protected] -pw user -v"),
RedirectStandardError = true,
RedirectStandardOutput = true,
RedirectStandardInput = true,
UseShellExecute = false,
CreateNoWindow = true
};
Process p = Process.Start(psi);
m_objLock = new Object();
m_blnDoRead = true;
AsyncReadFeedback(p.StandardOutput); // start the async read of stdout
AsyncReadFeedback(p.StandardError); // start the async read of stderr
StreamWriter strw = p.StandardInput;
// SLEEP HERE 10 SEC
strw.WriteLine("exit"); // send exit command at the end
p.WaitForExit(); // block thread until remote operations are done
return m_szFeedback;
}
private String m_szFeedback; // hold feedback data
private Object m_objLock; // lock object
private Boolean m_blnDoRead; // boolean value keeping up the read (may be used to interrupt the reading process)
public void AsyncReadFeedback(StreamReader strr)
{
Thread trdr = new Thread(new ParameterizedThreadStart(__ctReadFeedback));
trdr.Start(strr);
}
private void __ctReadFeedback(Object objStreamReader)
{
StreamReader strr = (StreamReader)objStreamReader;
string line;
while (!strr.EndOfStream && m_blnDoRead)
{
line = strr.ReadLine();
// lock the feedback buffer (since we don't want some messy stdout/err mix string in the end)
lock (m_objLock) { m_szFeedback += line + "\r\n"; }
}
}
}
ПЕРВАЯ ПРОБЛЕМА
Первая проблема, с которой я столкнулся, это автоматическое принятие ключа RSA, что я могу сделать, работая
echo y |plink.exe -ssh -N -D 9999 [email protected] -pw user -v
но оказывается, что я получаю сообщение об ошибке, когда использую echo y |
в строке Process p = Process.Start(psi);
, где переменная psi
в порядке. Я знаю, как поставить аргументы после Arguments = String.Format("-ssh -N -D 9999 [email protected] -pw user -v"),
, но я не знаю, как поставить их перед командой.
ВТОРАЯ ПРОБЛЕМА
Вторая проблема заключается в том, что я не хочу ждать контента, потому что когда я создаю туннель, он ничего не говорит, просто ждет. Я просто хочу открыть туннель SSH в фоновом режиме на 127.0.0.1:9999
, вот и все.
Что мне нужно изменить?
Спасибо.
y
из файла:plink blabla < yes.txt
. Поскольку вы уже читаете из потока, открытого для plink, вы можете рассмотреть возможность записи в него y, потому чтоecho y |
фактически делает то же самое. - person Marged   schedule 17.10.2015plink blabla < yes.txt
хм, надо попробовать, я много использую в linux :)) - person Fitman   schedule 17.10.2015