如何通过 ssh 传递两个文件?

如何通过 ssh 传递两个文件?

我有一个 bash 脚本,它将通过 ssh 对服务器执行我选择的脚本。我的问题是我还想使用带有公共变量的输入文件,这样我就不必在每个脚本中更改它们。到目前为止,我尝试让它获取这两个文件的来源,导致它试图在远程计算机上找到其中一个文件。

输入

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

来源清单

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

脚本

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

我有这个测试脚本来查看它是否将变量传递到远程计算机:

测试脚本

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

到目前为止,这是我尝试让源列表通过的方法:

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"

这将在本地计算机上创建一个空白的测试日志文件

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

这将在本地计算机上创建一个空白的“testlog”文件

我也尝试过使用source bash .调用文件,但我似乎仍然无法将两个本地文件传递到远程计算机。有人知道如何做到这一点吗?

答案1

理解你真正想要做什么有点困难。如果你想连接$sourcelist和的内容$tools/$2并在 Bash 中执行它,你可以使用cat这两个文件并通过管道来ssh像这样:

cat "$sourcelist" "$tools/$2" | sshpass -e ssh $usrconn@$ipconn 

答案2

只需用于scp复制所需的文件,将它们源到那里并在完成后删除它们?

相关内容