원격 서버 및 로컬 nslookup의 tail 파일

원격 서버 및 로컬 nslookup의 tail 파일

호스트를 확인하기 위한 스크립트가 필요합니다.

이제 로컬 컴퓨터에서 이 스크립트를 실행합니다.

for i in `tail -F access.log | awk '{print $8}' | awk '{gsub("http://|/.*","")}2' | awk '{gsub("http://|:.*","")}1' | grep -E -v "[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}"`
do 
   nslookup $i [dns-server_ip]; 
done > ips.txt

하지만 난 필요해꼬리일부 원격 호스트에서 파일을 가져와 실행찾다내 로컬 컴퓨터에서는 이 작업을 수행하는 방법을 모르겠습니다.

답변1

SSH를 사용하시겠습니까?

대부분의 명령은 단순히 command 앞에 추가하여 원격으로 실행할 수 있으므로 ==> 로 ssh바꾸십시오 .tail -F access.logssh REMOTEHOST tail -F access.log

ssh myUSER@myREMOTEHOST tail -F access.log |
awk '{print $8}' |
awk '{gsub("http://|/.*","")}2' | awk '{gsub("http://|:.*","")}1' |
grep -E -v "([0-9]{1,3}\.){3})[0-9]{1,3}" | while read i ;
do 
   nslookup $i $dnsServerIP; 
done > ips.txt

@kasperd와 @archemar도 암시했듯이, 그렇게 긴 파이프는 청소할 수 있고 청소해야 합니다. 내 의견은 다음과 같습니다.

ssh myUSER@myREMOTEHOST tail -F access.log |
awk '{$0=$8; gsub("https?://|[/:].*","")} !/([0-9]{1,3}.){1,3}[0-9]{1,3}/' |
while read i ; do
    nslookup $i $dnsServerIP; 
done > ips.txt

설명하다:

  • $0=$8. 예제 출력에서 ​​필수 URL이 포함된 열은 #8입니다. 이 명령은 $0element 만으로 전체 행을 덮어쓰고 $8나머지는 효과적으로 삭제합니다. 이는 다음을 대체합니다.'{print $8}'

  • gsub("https?://|[/:].*","")}두 개의 gsub 호출을 모든 가능성을 포괄하는 호출로 바꾸십시오. 코드에서 "http://"를 두 번 검색했는데 http와 일치하지 않았습니다.에스.

  • !/([0-9]{1,3}.){1,3}[0-9]{1,3}/'개별 grep 호출을 정확히 동일한 정규식으로 바꾸십시오. $0숫자 IP가 아닌 경우 true로 평가되어 암시적으로 수행됩니다 {print $0}'. 조금 더 짧게 가도 h=$0;gsub(/[0-9.]/,"",h)} h같은 효과를 얻을 수 있습니다.

참고: - 꼬리에 대한 호출 21다음 값은 로 평가되며, 이는 암시적으로 로 확장됩니다. 이것이 내 솔루션의 마지막 정규 표현식이 일치하지 않는 줄을 암시적으로 인쇄하는 방법/이유입니다.}gsubtruetrue {print $0}

관련 정보