web-dev-qa-db-ja.com

2つのファイルをsshに渡すにはどうすればよいですか?

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

これはローカルマシンに空の「テストログ」ファイルを作成します

また、sourcebash.を使用してファイルを呼び出そうとしましたが、両方のローカルファイルをリモートマシンに渡すことができないようです。誰もがこれを行う方法を知っていますか?

2
jesse_b

あなたが本当にやろうとしていることを理解するのは少し難しいです。 $sourcelist$tools/$2のコンテンツを連結してBashで実行する場合は、これら2つのファイルでcatを使用し、次のようにsshにパイプできます。

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

scpを使用して必要なファイルをコピーし、そこから調達し、完了したら削除しますか?

0
Jaleks