4

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

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

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

4

4 回答 4

5
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'

看看有没有帮助

于 2012-04-22T03:36:05.317 回答
3

如何通过 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

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

于 2014-03-10T10:21:27.603 回答
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
)
于 2012-04-22T11:43:28.177 回答
0

请记住,这不是规则,您必须 cd 到请求的目录。

访问远程机器后,只需键入此文件的相对路径,无需使用 cd:

/some_folder/./run.py
于 2014-05-09T15:29:11.100 回答