SSH経由でサーバーに対して私が選択したスクリプトを実行するbashスクリプトがあります。私の問題は、すべてのスクリプトで変更する必要がないように、パブリック変数で入力ファイルを使用したいということです。これまで2つのファイルをソースにインポートしようとしましたが、その結果、リモートシステムでファイルの1つを見つけようとしました。
入力する
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
.
まだ2つのローカルファイルをリモートシステムに渡すことはできないようです。これを行う方法を知っている人はいますか?
答え1
あなたが本当にやりたいことが何であるかを理解するのは少し難しいです。 Bash$sourcelist
の内容をリンクし$tools/$2
てBashで実行するには、両方のファイルを使用して次のようにcat
パイプすることができます。ssh
cat "$sourcelist" "$tools/$2" | sshpass -e ssh $usrconn@$ipconn
答え2
scp
必要なファイルをコピーし、そこにソースを入力して完了したら削除するために使用しますか?