2010-01-15 65 views
1

我一直在努力自动ssh进入Linux服务器。什么是疯狂的,是我可以创建一个.bat脚本,这将做到这一点,但我必须身体力行才能输入密码。CMD.exe C#模拟器?

我已经尝试使用System.Diagnostics.Process对象在c#中自动执行此操作,但没有结束。我发现,没有办法让这个对象允许你看到密码提示。它把每一行都放到那一点,然后不输出更多的行。

cmd.exe,确实可以让你在脚本中从流程跳转到流程;这一切都整合到一个屏幕,只是提示你的东西,如密码,然后你键入它们。

有任何简单的方法,在C#中,使CMD.EXE认为你是一个人键入它,所以我可以模拟这个编程?否则,System.Diagnostics.Process似乎不提供与输出密码提示的进程进行交互的方式。你从来没有看到明确发生的提示,当您在运行CMD.EXE同样的事情

+3

你有没有考虑设置SSH密钥以避免密码问题? http://oreilly.com/pub/h/66 – dsolimano 2010-01-15 18:46:45

+0

是的,我已经做到了。实施时,批处理文件不会提示。但是,通过System.Diagnostics.Process,该进程在传递ssh-authentication密钥的位置停止输出行。 – 2010-01-15 21:13:47

+0

也许认证是在另一个进程中执行的,而不是在进程对象中指定的进程。与cmd.exe不同,当进程调用另一个进程时,进程对象失去了被监视的能力。 – 2010-01-15 21:15:36

回答

1

你可以使用

Windows.Forms.SendKeys() 发送密码击键

Reference Material

+0

问题是,我无法让C#甚至使密码提示可用。 System.Diagnostics.Process对象输出命令行进程的行,直到我期望提示输出,然后停止输出行。 – 2010-01-15 21:27:21

+0

该进程正在设置他们等待输入密码,并且我无法通过System.Diagnostics.Process访问提示。 – 2010-01-15 21:28:12

2

cmd.exe不是SSH客户端;它只是一个壳。探索实际客户端的功能。在PuTTY(非常受欢迎!)中,如果您有SSH密钥,则会有自动登录功能。

+0

同意。你真的需要看看SSH密钥。它们提供了一种通过SSH登录的安全方式,无需在每种方式中输入密码。 – GnomeCubed 2010-01-15 19:33:50

+0

我已经实现了密钥。他们在cmd.exe中工作,但在c#的System.Diagnostics.Process对象中,所有输出(可通过此过程对象访问)在ssh-key-authentication之前(或之中)停止。但是,当我双击一个.bat文件时,输出会继续执行验证。 – 2010-01-15 21:49:10

+0

如果我使用相同的.bat文件(不挂断),作为我的System.Diagnostics.Process.Filename,过程对象无法在认证后输出行。 – 2010-01-15 21:51:04

1

不知道您使用哪个命令行工具ssh到服务器,没有提供密码的命令行参数。

C:\> ssh [email protected] -p password 

或者你试图输入重定向:

ssh [email protected] < 
Yourpassword 
EOF 

在寻找到你的earlier问题,什么是您使用的编程接口都具有麻烦?

你确定你需要一个完整的SSH客户端,或者你只是想远程执行一个命令。如果是后者,则可能需要退出plink

+0

不,ssh不允许将密码作为参数输入。是的,我试过输入重定向。也许,问题的实质是,在我进行身份验证后,我无法继续进行交互。 – 2010-01-15 21:30:26

+0

即使我无法输入密码(通过ssh-key-authentication),即使发生身份验证,我也无法再监视System.Diagnostics.Process对象的行输出。 – 2010-01-15 21:31:34

+0

这就像在那个时候有一些棘手的安全问题。我是程序员,而不是黑客。也许我将不得不成为黑客来编写这个程序! – 2010-01-15 21:33:34