Running a Bash script over ssh

后端 未结 5 1368
春和景丽
春和景丽 2020-11-28 07:05

I\'m trying to write a Bash script that will SSH into a machine and create a directory. The long-term goal is a bit more complicated, but for now I\'m starting simple. Howev

5条回答
  •  醉梦人生
    2020-11-28 07:57

    How to run a local script over SSH

    Synopsis:

    Script execution over SSH without copying script file. You need a simple SSH connexion and a local script.

    Code:

    #!/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
    

    Examples:

    • 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

    Step by step explanations

    This script performs this operations: 1° catches first line #! to get interpreter (i.e: Perl, Python, Ruby, Bash interpreter), 2° starts remote interpeter over SSH, 3° send all the script body over SSH.

    Local Script:

    Local script must start with #!/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

    This script is not based on local script extension but on #! information.

提交回复
热议问题