2013-04-17 215 views
1

好吧,我有一個需要通過SSH執行一堆命令的腳本,但是我也想允許它在本地運行相同的命令,如果提供的目標是本地路徑而不是主機名稱。通過SSH執行大量命令

現在我可以確定我是否在本地操作而沒有太多麻煩,但是我有一套非常複雜的命令來運行,遠遠超過了適合直接作爲參數提供給ssh的參數。

我想要做的是一樣的東西:

if [ -n "$HOST" ] 
    then 
     ssh "$HOST" 
fi 

# Run some commands 
# exit 

但也有明顯的問題,比如我怎麼會通過相應的變量和退出,而不會導致當指定本地腳本提前結束。所以我不確定這是否可行,有沒有辦法像上面那樣使用普通的shell命令來實現遠程運行?

如果沒有,替代方法是提取我需要運行的命令到他們自己的shell腳本中,並確保我的ssh命令拷貝跨越shell腳本(如果它不存在)然後運行它,但我不知道該怎麼做?我熟悉基本的unix命令,但不是這樣的!

無論如何,我會很感激任何建議,以最好的方式來做到這一點,如果可能的話,給一個詳細的例子。

回答

-1

看看遠程shell。 http://en.wikipedia.org/wiki/Remote_Shell雖然有一些問題,如如何處理安全。以純文本文件存儲密碼不是你想要的。您還需要在電腦之間建立某種信任。如果您使用的是linux/unix,請檢查您的本地手冊頁。

1

因爲我爲無密碼SSH設置了公鑰認證,信任並不是問題。

無論如何,看來我最好的選擇是將命令提取到一個shell腳本中並根據需要發送給服務器。也就是說,我在這裏想的是,文檔也可以讓我在不發送腳本的情況下完成它,儘管在需要時發送腳本可能是我需要的更高效的工作量選項。

這裏有一個例子我是一個here文檔思維:

if [ -n "$HOST" ]; then ssh "$HOST" <<- 'REMOTE_SESSION'; fi 

    # Some commands 

if [ -n "$HOST" ]; then REMOTE_SESSION; fi 

的主要困難是確保遠程會話中的命令「塊」的結構正確,因爲任何標準輸入和標準輸出將在SSH連接打開時位於遠程服務器上。