Bash
如何通過 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
.
來呼叫文件,但我似乎仍然無法將兩個本地文件都傳遞給遠端機器。任何人都知道如何做到這一點?
很難理解你真正想要做什麼。如果你想連接 and 的內容
$sourcelist
並$tools/$2
在 Bash 中執行它,你可以使用cat
這兩個文件和管道來ssh
像這樣:cat "$sourcelist" "$tools/$2" | sshpass -e ssh $usrconn@$ipconn
只是
scp
用來複製所需的文件,在那裡獲取它們並在完成後刪除它們?