2015-11-04 23 views
1

我有一個運行在Unix服務器上的腳本(在Solaris上是精確的)。該腳本使用ftp實用程序來調整大型機服務器中的文件,然後將它們傳送到Unix服務器。無法使用C#和SSH.NET在Windows服務器上運行Unix服務器中的用戶腳本

最近,我正在嘗試使用Windows窗體和C#開發Windows桌面應用程序。我正嘗試使用codeplex提供的SSH.NET庫。問題是,每當我從應用程序運行正常的Unix命令時,它就會運行,但是當我嘗試運行腳本時,它不起作用。我檢查了連接並且應用程序已正確連接到服務器。我都用了下面的方法,但沒有運氣: -

using (ssh client = new SshClient("Ip", "username", "password")) 
{ 
    client.Connect(); 
    SshCommand cmd = client.RunCommand("script"); 
    client.Disconnect(); 
} 

using (ssh client = new SshClient("hostnameOrIp", "username", "password")) 
{ 
    client.Connect(); 
    SshCommand cmd = client.createCommand("script"); 
    cmd.execute(); 
    client.Disconnect(); 
} 

如果有人點我朝着正確的方向這將是一個巨大的幫助。

編輯: - 使用完整路徑運行腳本已經工作,因爲被調用的非交互式shell在加載時不會讀取/ etc/profile/env變量。我會嘗試建議的其他選項,並在出現問題時編輯帖子。

+0

*它不起作用*:這是什麼意思?它不運行?或者運行失敗?當你試圖運行它時,輸出是什麼? –

+0

沒有輸出。輸出應該是有問題的文件,在經過一些調整後從大型機服務器傳輸到nix服務器。如果腳本失敗,則文件不會被傳輸,並且沒有其他輸出。不過,我可以檢查stderr並獲得一些洞察。我有機會的時候會做這件事。 – KChow

回答

0

您的問題非常模糊。

但首先,我會嘗試的是添加一個路徑到腳本。絕對(/home/user/script)或相對(./script)。

* nix shell默認情況下不會在當前工作目錄(本例中爲主目錄)中查找可執行文件。如果您的PATH中有.,他們只會找到它們。

請注意,RunCommand使用非交互式會話。它可能與您在SSH終端中使用的交互式會話有不同的環境(PATH)。不同組的啓動腳本用於交互式和非交互式會話。

+0

scrpt在我的箱子裏。它可以從我在nix服務器上的任何路徑訪問。所以,理想情況下,我應該能夠在使用憑據連接到服務器時運行腳本。我在這裏錯過了什麼嗎? – KChow

+0

你真的嘗試完整路徑嗎? 'RunCommand'使用非交互式會話。它可能與您在SSH終端中使用的交互式會話有不同的環境('PATH')。 –

+0

它使用完整路徑。謝謝 !! – KChow

1

您需要調試您的unix腳本。將腳本修改爲將stderr管道化爲文本文件,並查看它說的內容。例如,腳本可能依賴於使用ssh.net運行時所改變的環境屬性

+0

謝謝。我去做。如果有,解決方法是什麼? – KChow

+0

這取決於腳本。我建議你發佈一個新的問題,其中包含有關腳本如何在ssh –

+0

下失敗的詳細信息。但是我真正想問的是,是否有任何固有屬性或方法來運行使用c#環境變量或ssh .net lib的用戶腳本? – KChow

0

請確保用戶的默認路徑正確並且路徑中存在腳本。爲了調試最後的命令/腳本運行/退出狀態,你可以再次運行shell命令echo $?通過C#ssh客戶端獲取有關錯誤的詳細信息。這可能會提供一些有關錯誤的見解

+0

我這樣做,退出狀態是非零。腳本失敗。我還沒有機會檢查stderr。我希望這給了我一些線索。 – KChow

+0

與該退出代碼,我們可以得到關於錯誤類型的線索。 – Venkatesh

相關問題