我有一个脚本(比如说run.py
),我想将它 scp 到远程机器(比如说10.1.100.100
),cd 到该远程机器的目录中,然后run.py
在该目录中执行。
如何将上述过程包装在一个 bash 脚本中?我不知道如何让 bash 在另一台机器上远程执行命令。
run.py
希望我能在终端中看到那个标准输出。但如果我只能重定向它,那也没关系。
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'
看看有没有帮助
通过 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
该脚本不是基于本地脚本扩展,而是基于 #! 信息。
你可以这样做:
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
)
请记住,这不是规则,您必须 cd 到请求的目录。
访问远程机器后,只需键入此文件的相对路径,无需使用 cd:
/some_folder/./run.py