SSH를 통해 bash 스크립트를 사용하여 원격 Linux 서버 IP 주소 얻기

SSH를 통해 bash 스크립트를 사용하여 원격 Linux 서버 IP 주소 얻기

SSH를 통해 bash 스크립트를 사용하여 원격 Linux 서버 eth1 IP 주소를 얻어야 하며 다음 명령이 있습니다. /sbin/ifconfig eth1 | grep 'inet 주소:'| grep -v '127.0.0.1' | 컷 -d: -f2 | awk '{ $1 인쇄}'

하지만 내가 실행할 때 :

generate ssh -t $user@$remote_host "/sbin/ifconfig eth1 | grep 'inet addr:'| grep -v '127.0.0.1' | cut -d: -f2 | awk '{ print $2}' ; echo $ip " "1"을 읽을 수 없다고 합니다. "spawn ssh -t $user@$remote_host "ip= /sbin/ifconfig eth1 | grep 'inet addr:'| grep -v '127.0.0.1' | cut -d: -f2 | awk '{ print $1}'; 실행 중에는 해당 변수가 없습니다. echo $ip "" (파일 "./ssh2.sh" 라인 11)

이 문제를 해결하도록 도와주세요. 감사해요

답변1

더 이상 사용되지 않는 ip대신 사용 ifconfig하고 awk가 그렇게 할 수 있으므로 모든 추가 grep 및 잘라내기를 건너뛰는 것이 좋습니다.

그래서 다음과 같은 명령은ip addr show dev eth0 | awk '/^ +inet / {split($2,a,"/"); print a[1]}'

어쨌든, 예제 명령에서 발생하는 대부분의 문제는 선택한 따옴표 유형 및 bash가 이를 평가하는 방법과 관련이 있습니다.

다음 과 같은 작업을 수행하면 예상한 것과는 다른 cfrancy@ws:~$ ssh root@srv01 echo "Hello $USER"출력이 표시됩니다 . 원격 시스템에 대한 명령 주위에 큰따옴표를 사용했기 때문에 모든 변수가 평가됩니다.Hello cfrancyHello root"~ 전에명령이 전송됩니다. 원격 사이트에서 평가되었으므로 명령 이 cfrancy@ws:~$ ssh root@srv01 echo 'Hello $USER'반환됩니다 . 물론 일이 제대로 작동하려면 복합 명령 내에서 다른 따옴표를 전환하거나 이스케이프 처리해야 합니다.Hello root$USER

어쨌든, 인용 동작을 염두에 두면 명령이 원하는 대로 작동할 것입니다. 하지만 나는 4개 대신 2개의 프로그램만 사용하기 때문에 ip, 및 만 사용하는 솔루션이 더 나은 선택이라고 생각합니다 .awk

ssh -t $user@$remote_host '/sbin/ifconfig eth0 | grep "inet addr:"| grep -v "127.0.0.1" | cut -d: -f2 | awk "{ print $1}"'

관련 정보