텍스트의 값을 변수에 할당하는 방법은 무엇입니까?

텍스트의 값을 변수에 할당하는 방법은 무엇입니까?

다음과 같은 텍스트가 있습니다.

node1: connect command: ssh [email protected] password: qcipunbnctza
node2: connect command: ssh [email protected] password: ejrpnnwsczpa
node3: connect command: ssh [email protected] password: pkrpxmyxnxuu

IP 주소와 비밀번호를 변수에 저장한 다음 이를 스크립트에 전달해야 합니다. 이 작업을 어떻게 효율적으로 수행할 수 있습니까? 내 스크립트는 다음과 같습니다

#/bin/bash
declare -a IPS=($1 $2 $3)
CONFIG_FILE=inventory/sks-cluster/hosts.yaml python3 contrib/inventory_builder/inventory.py ${IPS[@]}
echo $4 > host1.txt
echo $5 > host2.txt
echo $6 > host3.txt
ssh-keyscan $1
ssh-keyscan $2
ssh-keyscan $3
sshpass -f host1.txt ssh-copy-id user@$1
sshpass -f host2.txt ssh-copy-id user@$2
sshpass -f host3.txt ssh-copy-id user@$3

답변1

다음과 같이 시도해 보세요.

#!/bin/bash

export SSHPASS
awk -F'[@ ]' '{print $5, $6, $8}' hostlist.txt |
  while read -r username host SSHPASS ; do
    echo ssh-keyscan "$host"
    echo sshpass -e ssh-copy-id "$username@$host"
done

이는 awk 한 줄짜리를 사용하여 이름이 지정된 파일에서 각 줄의 사용자 이름, 호스트 이름/IP 주소 및 비밀번호를 추출 hostlist.txt하고 출력을 while루프로 파이프합니다.

루프 while는 각 입력 줄의 출력을 처리하고 awk이를 및와 함께 사용합니다(파일 대신 환경 변수가 사용되도록 대신 옵션을 사용).ssh-keyscansshpass-e-f$SSHPASS

SSHPASSsshpass런타임 시 환경에서 사용할 수 있도록 내보내집니다.

echo참고: 이전에 이것을 사용한 적이 ssh-keyscan있으며 sshpass시험 실행해 보았습니다. (그리고 내 시스템이 ssh-keyscan 및 ssh-pass+ssh를 사용하여 이러한 IP 주소에 연결하려고 시간을 낭비하지 않아도 된다면 테스트가 더 빨라질 것이기 때문입니다. 복제본 ID). echo예상대로 작동한다고 확신하면 두 줄을 제거하십시오.

답변2

이것은 매우 순진한 접근 방식입니다.

스크립트가 호출 yourscript.sh되고 데이터가nodes.txt

yourscript.sh  $(cat nodes.txt |  tr '@' ' ' | cut -f6 -d' '; cut -f7 -d' ' nodes.txt)

관련 정보