Running local script remotely with arguments


 
Thread Tools Search this Thread
Top Forums UNIX for Beginners Questions & Answers Running local script remotely with arguments
# 1  
Old 02-14-2019
Running local script remotely with arguments

Dear Experts,

I have found this script on internet that can be used to execute local script remotely
Code:
#!/bin/bash
# runremote.sh
# usage: runremote.sh localscript remoteuser remotehost arg1 arg2 ...

realscript=$1
user=$2
host=$3
shift 3

# escape the arguments
declare -a args

count=0
for arg in "$@"; do
  args[count]=$(printf '%q' "$arg")
  count=$((count+1))
done

{
  printf '%s\n' "set -- ${args[*]}"
  cat "$realscript"
} | ssh $user@$host "cat | bash /dev/stdin"

Can anyone help me understand how does this below part works
Code:
{
  printf '%s\n' "set -- ${args[*]}"
  cat "$realscript"
} | ssh $user@$host "cat | bash /dev/stdin"

# 2  
Old 02-14-2019
Looks extremely kludgy and pointlessly overcomplicated, I don't recommend it. This does the exact same thing without most of the nonsense and security holes.

Code:
#!/bin/sh

SCRIPT="$1"
U="$2"
H="$3"
shift 3

exec ssh "$U@$H" exec sh -s "$@" < "$SCRIPT"

One important side-effect of both methods is that the script you're running can't be interactive. It won't have keyboard access. That input channel has been used to send the script instead.
These 2 Users Gave Thanks to Corona688 For This Post:
# 3  
Old 02-14-2019
Because arguments are passed as strings, embedded spaces are lost normally.
The original script makes an attempt to retain arguments with embedded special characters.
The improved original script is
Code:
$ cat runremote.sh
#!/bin/bash
# runremote.sh
# usage: runremote.sh localscript remoteuser remotehost arg1 arg2 ...

realscript=$1
user=$2
host=$3
shift 3 || exit

args=$(printf "%q " "$@")
ssh "$user@$host" "bash -s $args" < "$realscript"

Demonstration example
Code:
$ cat echo.sh
for i
do
   echo "$i"
done

Code:
$ /bin/bash echo.sh winter "summer time" "*"
winter
summer time
*
$ ./runremote.sh echo.sh user host winter "summer time" "*"
winter
summer time
*

These 3 Users Gave Thanks to MadeInGermany For This Post:
# 4  
Old 02-14-2019
Quote:
Originally Posted by MadeInGermany
Because arguments are passed as strings, embedded spaces are lost normally.
Even when quoted via "$@" ?
# 5  
Old 02-14-2019
Yes, with ssh the argument strings are dequoted by the local shell and then seen by the remote shell. The "$@" or a "${array[@]}" only preserves the strings for the local dequoting.
The args=$(printf "%q " "$@") \escapes each special character, so the double dequoting works.
Other methods are args=$(printf "'%s' " "$@") or args=$(printf "\"%s\" " "$@").
This User Gave Thanks to MadeInGermany For This Post:
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

Need to pass arguments while running a Shell Script

Shell Script Gurus, I am writing a shell script which needs User ID's to pass as an Arguments in command line while executing. Can this be doable? I've never done this, If you give a sample script that would be helpful, Thanks. (1 Reply)
Discussion started by: shekar777
1 Replies

2. Shell Programming and Scripting

How can I execute local script on remote machine and include arguments?

I have a script in local server cd /home/dell/work/BOP/testdir ./processchk po (here processchk is a script & po is passed as an argument) Now I want to execute this script from remote server ssh $username@$hostname "cd /home/dell/work/BOP/testdir; ./processchk po" But Its getting error... (9 Replies)
Discussion started by: manohar2013
9 Replies

3. Shell Programming and Scripting

Difference between running a script locally and remotely

Hello, Please, what is the difference between running a script remotely: ssh -t root@$machine -x "sshpass -p 'ubuntu' ssh -t ubuntu@$address -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/nul -x './c-launch.sh'" and running a script directly on the host: ... (1 Reply)
Discussion started by: chercheur111
1 Replies

4. Shell Programming and Scripting

Passing arguments while running the script

Hi, I have a requirement for creating a MQ (queue) where the inputs has to be passed as arguments. Running the script as below ./hi.sh "Servername" "QueueManagername" "QueuecreationCommand" cat hi.sh echo "Welcome to $1" runmqsc $2 < $3 But the queue creation command is... (9 Replies)
Discussion started by: Anusha M
9 Replies

5. Shell Programming and Scripting

To run a local shell script in a remote machine by passing arguments to the local shell script

I need to run a local shell script on a remote machine. I am able to achieve that by executing the command > ssh -qtt user@host < test.sh However, when I try to pass arguments to test.sh it fails. Any pointers would be appreciated. (7 Replies)
Discussion started by: Sree10
7 Replies

6. Shell Programming and Scripting

Then error while running script remotely

facing issue with then error while running a local script aginst a remote server. i facing the same issue in multiple scripts. So what i am missing here or what is needed. #!/bin/ksh echo "enter the filename" read file if then echo "file exists" else echo "file does not exists" fi ... (0 Replies)
Discussion started by: NarayanaPrakash
0 Replies

7. Shell Programming and Scripting

Running local script remotely with arguments in ksh

When i use ssh command to execute local script on remote server , I am unable to do it. Please let me know how this can be done in ksh req=abc dte=ghd ssh username@hostname "$req $dte" < run_script.sh (2 Replies)
Discussion started by: lalitpct
2 Replies

8. Solaris

Can i bind to a local login terminal running using rsh or remotely

Hi Can i ask? I had multiple solaris workstation running and some local users using it. Is it possible to bind to the local user terminal or console he's using as if like the user well type and I can see it and what my typing in the local user see it also. Is it possible.. Thanks. (3 Replies)
Discussion started by: jao_madn
3 Replies

9. Shell Programming and Scripting

remotely call function from local script

The following code doesn't work properly which means it doesn't displays remote output. #!/bin/ksh #################### Function macAddressFinder ######################## macAddressFinder() { `ifconfig -a > ipInterfaces` `cat ipInterfaces` }... (2 Replies)
Discussion started by: presul
2 Replies

10. Shell Programming and Scripting

running command remotely to populate local variable

If I run this # ssh remote-server 'du -sk /usr/platform/`uname -i`/' 174 /usr/platform/SUNW,Sun-Fire-V245 I get my output just fine, However, if i try to do the same but populate a local variable within my script called for example 'result' #!/bin/ksh result=`ssh remote-server... (3 Replies)
Discussion started by: hcclnoodles
3 Replies
Login or Register to Ask a Question