Como posso passar dois arquivos pelo ssh?

2

Eu tenho um script bash que irá executar um script de minha escolha em um servidor sobre o ssh. Meu problema é que eu também quero usar um arquivo de entrada com variáveis comuns, então não preciso alterá-las em cada script. Até agora, minhas tentativas de obter os dois arquivos resultaram na tentativa de encontrar um deles na máquina remota.

entrada

JBLGSMR002,IP.IP.IP.IP,root,pers,pers

sourcelist

#!/bin/bash
var1="Some stuff"
var2="Some stuff 2"

Script

#!/bin/bash
#
#set -x
input="/home/jbutryn/Documents/scripts/shell/input/nodelist.csv"
sourcelist="/home/jbutryn/Documents/scripts/shell/Tools/slist"
tools="/home/jbutryn/Documents/scripts/shell/Tools"
#
is.there () {
        if grep -wF $1 $2 > /dev/null 2>&1 ; then
                echo "true"
        else
                echo "false"
        fi
}
#
nodethere=$(is.there $1 $input)
#
if [[ $nodethere = "true" ]]; then
        ipconn=$(awk -F ',' '/'"$1"'/ {print $2}' $input)
        usrconn=$(awk -F ',' '/'"$1"'/ {print $3}' $input)
elif [[ $nodethere = "false" ]]; then
        echo "Couldn't find $1 in database"
        exit 1
fi
#
if [[ -f $tools/$2 ]]; then
        echo "Please enter your password for $1: "
        read -s SSHPASS
        eval "export SSHPASS='""$SSHPASS""'"
        sshpass -e ssh $usrconn@$ipconn <  "$tools/$2"
elif [[ ! -f $tools/$2 ]]; then
        echo "Couldn't find $2 script in the Tools"
        exit 1
fi

Eu tenho este script de teste para ver se ele está passando as variáveis para a máquina remota:

Script de teste

#!/bin/bash
#
touch testlog
echo $var1 >> ./testlog
echo $var2 >> ./testlog

E isso é o que eu tentei até agora para fazer com que o sourcelist passe:

if [[ -f $tools/$2 ]]; then
        echo "Please enter your password for $1: "
        read -s SSHPASS
        eval "export SSHPASS='""$SSHPASS""'"
        sshpass -e ssh $usrconn@$ipconn < "$sourcelist"; "$tools/$2"

Este irá criar um arquivo testlog em branco na máquina local

if [[ -f $tools/$2 ]]; then
    echo "Please enter your password for $1: " 
    read -s SSHPASS
    eval "export SSHPASS='""$SSHPASS""'"
    sshpass -e ssh $usrconn@$ipconn <'EOF'
    source $sourcelist
    bash "$tools/$2"
    logout
    EOF

Este irá criar um arquivo "testlog" em branco na máquina local

Eu também tentei usar source bash . para chamar os arquivos, mas ainda não consigo obter os dois arquivos locais para passar para a máquina remota. Alguém sabe como isso pode ser feito?

    
por Jesse_b 13.07.2017 / 04:09

2 respostas

3

É um pouco difícil entender o que você está realmente tentando fazer. Se você quiser concatenar o conteúdo de $sourcelist e $tools/$2 e executá-lo no Bash, você pode usar cat com esses dois arquivos e canalizar para ssh da seguinte forma:

cat "$sourcelist" "$tools/$2" | sshpass -e ssh $usrconn@$ipconn 
    
por 15.07.2017 / 16:45
0

Basta usar scp para copiar os arquivos necessários, fornecê-los lá e excluí-los quando terminar?

    
por 15.07.2017 / 09:50