Bash:如何远程运行脚本

时间:2012-04-22 03:26:48

标签: linux bash shell

我有一个脚本(比如说run.py),我想把它scp到远程机器(比如10.1.100.100),cd到该远程机器的目录中,然后执行run.py在那个目录中。

如何在一个单独的bash脚本中包含上述过程?我不知道如何让bash在另一台机器上远程执行命令。

希望我能在终端中看到run.py的标准输出。但如果我只能重定向它,那也没关系。

4 个答案:

答案 0 :(得分:4)

chmod +x ./run.py
scp -pq  ./run.py 10.1.100.100:'/home/myremotedirectory/run.py'
ssh 10.1.100.100     'cd /somedirectory  &&  /home/myremotedirectory/run.py'

看看是否有帮助

答案 1 :(得分:1)

你可以这样做:

ssh -l yourid 10.1.100.100 << DONE
cd /your/dir/
./run.py
DONE

上面已经编辑过,我不记得它原来是什么样的,如果我想在一个连接中完成它,我会这样做。

ssh -l yourid 10.1.100.100 python < <(
echo "import os"
echo "os.chdir('/yourdir')"
echo "print(os.getcwd())"
cat yourscript.py
)

答案 2 :(得分:1)

如何通过SSH运行本地脚本

梗概:

通过SSH执行脚本而不复制脚本文件。 您需要一个简单的SSH连接和本地脚本。

代码:

#!/bin/sh
print_usage() {
        echo -e "`basename $0` ssh_connexion local_script"
        echo -e "Remote executes local_script on ssh server"
        echo -e "For convinient use, use ssh public key for remote connexion"
        exit 0
}

[ $# -eq "2" ] && [ $1 != "-h" ] && [ $1 != "--help" ] || print_usage

INTERPRETER=$(head -n 1 $2 | sed -e 's/#!//')

cat $2 | grep -v "#" | ssh -t $1 $INTERPRETER

示例:

 - ssh-remote-exec root@server1 myLocalScript.sh #for Bash
 - ssh-remote-exec root@server1 myLocalScript.py #for Python
 - ssh-remote-exec root@server1 myLocalScript.pl #for Perl
 - ssh-remote-exec root@server1 myLocalScript.rb #for Ruby

逐步解释

此脚本执行此操作: 1°抓住第一线#!得到解释器(即:Perl,Python,Ruby,Bash解释器), 2°通过SSH启动远程互操作, 3°通过SSH发送所有脚本体。

本地脚本:

本地脚本必须以#!/ path / to / interpreter

开头
- #!/bin/sh for Bash script
 - #!/usr/bin/perl for Perl script
 - #!/usr/bin/python for Python script
 - #!/usr/bin/ruby for Ruby script

此脚本不是基于本地脚本扩展,而是基于#!信息。

答案 3 :(得分:0)

请记住,这不是一个规则,你必须cd到所请求的目录。

访问远程计算机后,只需键入此文件的相对路径,而不使用cd:

/some_folder/./run.py