什麼是在Bash中ssh和運行多個命令最乾淨的方法?

我已經設置了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


#1樓

要匹配您的示例代碼,您能夠將命令包裝在單個或雙重qoutes中。 例如 server

ssh blah_server "
  ls
  pwd
"

#2樓

將全部命令放在腳本上,它能夠像運行同樣運行rem

ssh <remote-user>@<remote-host> "bash -s" <./remote-commands.sh

#3樓

這也能夠以下完成。 將命令放在腳本中,咱們將其命名爲commands-inc.sh 字符串

#!/bin/bash
ls some_folder
./someaction.sh
pwd

保存文件 terminal

如今在遠程服務器上運行它。

ssh user@remote 'bash -s' < /path/to/commands-inc.sh

從未對我失敗過。


#4樓

在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

#5樓

這適用於建立腳本,由於您沒必要包含其餘文件:

#!/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
相關文章
相關標籤/搜索