如何在通过SSH

时间:2017-10-31 12:58:51

标签: bash shell ssh

我正在通过SSH在远程计算机上运行bash脚本。

ssh -T $DBHOST2 'bash -s' < $DIR/script.sh <arguments>

在脚本中,我使用源文件来定义脚本script.sh中使用的函数。

DIR=`dirname $0`      # to get the location where the script is located
echo "Directory is $DIR"
. $DIR/source.bashrc  # source file 

但由于远程计算机中不存在源文件,因此会导致错误。

Directory is .
./source.bashrc: No such file or directory

我总是可以定义函数和主脚本,而不是使用源文件,但我想知道有没有办法使用单独的源文件。

编辑:源文件和脚本都不在远程计算机中。

3 个答案:

答案 0 :(得分:1)

以下是这方面的方法 - 两者都只需要一个ssh会话。

选项1:使用tar将脚本复制到服务器

tar cf - $DIR/script.sh $DIR/source.bashrc | ssh $DBHOST2 "tar xf -; bash $DIR/script.sh <arguments>"

将您的脚本“复制”到$DBHOST2并在那里执行。

选项2:使用bashpp将所有代码包含在一个脚本中

如果无法将文件复制到$DBHOST2,请使用bashpp

.来电替换为#include,然后通过bashpp运行:

bashpp $DIR/script.sh | ssh $DBHOST2 bash -s

答案 1 :(得分:0)

ssh -T $DBHOST2 'bash -s' <<< $(cat source_file $DIR/script.sh)

答案 2 :(得分:0)

以下是我想要做的事情。

1.将源文件复制到远程计算机。

scp $DIR/source.bashrc $DBHOST2:./

2。Execute the local script with arguments on the remote machine via SSH

ssh $DBHOST2 "bash -s" -- < $DIR/script.sh <arguments>

3。将远程日志文件logfile.log复制到本地文件dbhost2.log并从远程计算机中删除源文件和日志文件

ssh $DBHOST2 "cat logfile.log; rm -f source.bashrc logfile.log" > dbhost.log