我已經設置了ssh代理,我能夠在Bash腳本中運行外部服務器上的命令,例如: bash
ssh blah_server "ls; pwd;"
如今,我真正想作的是在外部服務器上運行不少長命令。 將全部這些包含在引號之間會很是難看,並且我寧願屢次避免ssh'ing以免這種狀況。 服務器
那麼,有沒有一種方法能夠用括號括起來的一個方法作到這一點? 我正在尋找如下內容: ssh
ssh blah_server ( ls some_folder; ./someaction.sh; pwd; )
基本上,只要它乾淨,我會對任何解決方案感到滿意。 spa
爲了澄清,我在談論這是一個更大的bash腳本的一部分。 其餘人可能須要處理腳本,因此我想保持清潔。 我不但願有一個bash腳本,其中一行看起來像: 代理
ssh blah_server "ls some_folder; ./someaction.sh 'some params'; pwd; ./some_other_action 'other params';"
由於它很是醜陋且難以閱讀。 code
要匹配您的示例代碼,您能夠將命令包裝在單個或雙重qoutes中。 例如 server
ssh blah_server " ls pwd "
將全部命令放在腳本上,它能夠像運行同樣運行rem
ssh <remote-user>@<remote-host> "bash -s" <./remote-commands.sh
這也能夠以下完成。 將命令放在腳本中,咱們將其命名爲commands-inc.sh 字符串
#!/bin/bash ls some_folder ./someaction.sh pwd
保存文件 terminal
如今在遠程服務器上運行它。
ssh user@remote 'bash -s' < /path/to/commands-inc.sh
從未對我失敗過。
在Bash中SSH和運行多個命令。
用字符串中的分號分隔命令,傳遞給echo,全部命令都傳遞到ssh命令。 例如:
echo "df -k;uname -a" | ssh 192.168.79.134 Pseudo-terminal will not be allocated because stdin is not a terminal. Filesystem 1K-blocks Used Available Use% Mounted on /dev/sda2 18274628 2546476 14799848 15% / tmpfs 183620 72 183548 1% /dev/shm /dev/sda1 297485 39074 243051 14% /boot Linux newserv 2.6.32-431.el6.x86_64 #1 SMP Sun Nov 10 22:19:54 EST 2013 x86_64 x86_64 x86_64 GNU/Linux
這適用於建立腳本,由於您沒必要包含其餘文件:
#!/bin/bash ssh <my_user>@<my_host> "bash -s" << EOF # here you just type all your commmands, as you can see, i.e. touch /tmp/test1; touch /tmp/test2; touch /tmp/test3; EOF