2011-04-14 352 views
15

說我已經存儲在文件foo.sh在以下bash腳本:執行bash腳本

#!/bin/bash 
echo foo 

而不必scp文件,我怎麼能執行存儲在foo.sh上的腳本遠程機器?

我曾嘗試以下(有一些變化)沒有成功:

$ ssh [email protected] eval `cat foo.sh` 

eval `cat foo.sh`似乎擴大到eval #!/bin/bash echo foo這裏

+0

可能重複? ](http://stackoverflow.com/questions/305035/how-to-use-ssh-to-run-shell-script-on-a-remote-machine) – aioobe 2011-04-14 13:07:46

+0

你當然想要設置SSH它不需要密碼:http://www.csua.berkeley.edu/~ranga/notes/ssh_nopass.html – 2013-01-11 01:40:53

+0

這個問題的一些答案給了我糖尿病。 – Zenexer 2013-08-22 01:50:48

回答

25
ssh [email protected] 'bash -s' < local_script.sh 

我從該線程得到它:How to use SSH to run a shell script on a remote machine?

+0

如何將參數傳遞給該腳本? – Agostino 2014-03-04 14:27:39

+0

@Agostino:如果您需要使用某些參數調用local_script.sh,只需傳遞一個腳本的名稱,調用local_script.sh並添加必要的參數,而不是直接調用local_script.sh: – 2014-04-16 12:47:02

+0

我希望將它作爲一個班輪。你能做一個小代碼的例子嗎? – Agostino 2014-04-17 14:45:06

1

cat foo.sh | ssh -T [email protected]將要訣竅。 -T選項可以抑制由於從文件輸入管道而導致的警告。

+0

貓的無用用 – 2011-04-14 14:46:07

+0

聽說貓的無用用途。 ssh root @ remote 2011-04-14 15:29:32

1
cat foo.sh | ssh HOSTNAME 

現在測試,但:小心處理! :)
(刪除破折號(見註釋)和幾乎所有:))

+0

你爲什麼要'貓foo.sh -'?這將阻止,等待用戶點擊'ctrl-D' – 2011-04-14 14:45:25

+0

那麼,我沒有可測試的環境。沒有短跑?我糾正了它。 – 2011-04-14 17:53:05

+0

你不需要破折號,沒有從標準輸入讀取參數的'cat'。但是你根本不需要'cat',也不需要'foo.sh'文件。只需運行'sh'。 – Idelic 2011-04-14 23:26:02

3

在接受的答案我看到:

我想它作爲一個襯墊。你能做一個小代碼的例子嗎?

這應該是它:

ssh [email protected] 'bash -s -- uno' < local_script.sh 

或更好,用在這裏 - 在文件的[如何使用ssh在遠程機器上運行shell腳本

ssh [email protected] 'bash -s -- uno' <<\EOF 
> date 
> echo $1 
> EOF 
jue sep 18 13:01:25 CEST 2014 
uno