Search code examples
bashsshpass

Passing a variable in a bash script to sshpass


I am trying to pass a variable in a bash script to sshpass. Here is my code for reference:

NAME="HARRY"
sshpass -p passwd ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no -q ipaddress 'bash -s' << 'EOF'
   echo $NAME
EOF

How can I pass the variable in a bash script to sshpass? Thank you!


Solution

  • Easiest way is using env just before running bash

    NAME="HARRY"
    sshpass -p passwd ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no -q ipaddress env NAME="$NAME" 'bash -s' << 'EOF'
       echo $NAME
    EOF
    

    You can pass multiple variables with multiple env statements like

    export NAME="HARRY"
    export SOMEVAR="hello"
    sshpass -p passwd ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no -q ipaddress env NAME="$NAME" env SOMEVAR="$SOMEVAR" 'bash -s' << 'EOF'
       echo $NAME
    EOF
    

    Be aware that your variables might be interpreted when passing them. You can avoid that by changing env NAME="$NAME" to uninterpreted version env NAME="'$NAME'"