我有一个脚本(比如说run.py
),我想把它scp到远程机器(比如10.1.100.100
),cd到该远程机器的目录中,然后执行run.py
在那个目录中。
如何在一个单独的bash脚本中包含上述过程?我不知道如何让bash在另一台机器上远程执行命令。
希望我能在终端中看到run.py
的标准输出。但如果我只能重定向它,那也没关系。
答案 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连接和本地脚本。
#!/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