我有一个脚本(比如说run.py
),我想把它传给远程机器(比如说10.1.100.100
),cd到远程机器的一个目录中,然后在那个目录下执行run.py
如何将上述过程封装在一个bash脚本中? 我不知道如何让bash在另一台机器上远程执行命令。
希望我能在terminal看到run.py
标准输出。 但是,如果我只能redirect它,那也不错。
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 -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 )
通过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
该脚本不是基于本地脚本扩展,而是基于#! 信息。
请记住,这不是一个规则,你必须cd到所请求的目录。
一旦访问远程机器,只需输入该文件的相对路径,而不使用cd:
/some_folder/./run.py