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
필요한 파일을 복사하고 거기에 소스를 입력한 후 완료되면 삭제하는 데 사용하시겠습니까 ?