Bash

如何通過 ssh 傳遞兩個文件?

  • July 15, 2017

我有一個 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 .來呼叫文件,但我似乎仍然無法將兩個本地文件都傳遞給遠端機器。任何人都知道如何做到這一點?

很難理解你真正想要做什麼。如果你想連接 and 的內容$sourcelist$tools/$2在 Bash 中執行它,你可以使用cat這兩個文件和管道來ssh像這樣:

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

只是scp用來複製所需的文件,在那裡獲取它們並在完成後刪除它們?

引用自:https://unix.stackexchange.com/questions/378121