SSH를 통해 두 파일을 전송하는 방법은 무엇입니까?

SSH를 통해 두 파일을 전송하는 방법은 무엇입니까?

SSH를 통해 서버에 대해 내가 선택한 스크립트를 실행하는 bash 스크립트가 있습니다. 내 문제는 모든 스크립트에서 변경할 필요가 없도록 공용 변수와 함께 입력 파일을 사용하고 싶다는 것입니다. 지금까지 두 파일을 소스로 가져오려고 시도했으며 그 결과 원격 시스템에서 파일 중 하나를 찾으려고 했습니다.

입력하다

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

당신이 정말로하고 싶은 일이 무엇인지 이해하는 것은 약간 어렵습니다. Bash $sourcelist의 내용을 연결 $tools/$2하고 Bash에서 실행 하려면 두 파일을 모두 사용하고 다음과 같이 cat파이프 할 수 있습니다.ssh

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

답변2

scp필요한 파일을 복사하고 거기에 소스를 입력한 후 완료되면 삭제하는 데 사용하시겠습니까 ?

관련 정보