當我試圖遠程Linux機器上從Windows運行一個bash shell腳本抨擊。參數傳遞到執行腳本
我使用C#和SSH.Net庫。
腳本住在窗戶框,並不能在Linux機器上安裝。我在腳本中使用'File.ReadAllText(...)'讀取腳本作爲字符串加載。然後使用SSH.Net在Linux上執行腳本:
SshCommand cmd;
using (var client = new SshClient(ConnectionInfo))
{
client.Connect();
cmd = client.CreateCommand(string.Format("sh -x -s < {0}", script));
cmd.Execute();
client.Disconnect();
}
return cmd.ExitStatus;
這適用於腳本沒有任何參數的情況。但是,如果我需要在某些參數下執行腳本通過,但在PARAMS缺失:
cmd = client.CreateCommand(string.Format("sh -x -s p={0} < {1}", parameterString, script));
示例腳本是:
#!/bin/bash
# check-user-is-not-root.sh
echo "Currently running $0 script"
echo "This Parameter Count is [$#]"
echo "All Parameters [[email protected]]"
輸出是:
Currently running bash script
This Parameter Count is [0]
All Parameters []
更新
現在我使用銅(例如在批准的答案here :)。
cmd = client.CreateCommand(string.Format("curl http://10.10.11.11/{0} | bash -s {1}", scriptName, args))
但我仍然認爲必須有帶有參數的bash腳本讀取和跨SSH遠程Linux箱運行的方式。
任何幫助將不勝感激。
你是否想象'<'後面的東西可以是一串命令?它應該是一個文件名。 – tripleee
使用文件名很容易;-)你如何做到這一點,文件被讀入一個變量?.. – ozczecho
請參閱下面的答案。基本上你要找的是'sh -c'。 – tripleee