파이프를 통해 IP를 얻는 방법은 무엇입니까?

파이프를 통해 IP를 얻는 방법은 무엇입니까?

나는 모든 로컬 IP 수집을 사용한 arp-scan다음 특정 시스템 IP를 Mac 주소로 필터링하고 SSH를 사용하여 해당 특정 시스템에 자동으로 연결합니다. 파이프를 통해 다음 명령을 시도했습니다.

 sudo arp-scan --localnet|grep 10|cut -c1-12|xargs ssh myuser@

여기의 1c는 grep내 시스템의 MAC 주소의 시작 문자입니다.

다음 오류를 반환합니다.

SSH: 호스트 이름을 확인할 수 없습니다: 알 수 없는 이름 또는 서비스

xargs: ssh: 중단됨 상태로 종료되었습니다.

답변1

사용매개변수문자열 플래그 교체

xargs의 대체 문자열 플래그를 사용해야 합니다. 예를 들어 파이프라인의 나머지 부분이 예상대로 작동한다고 가정합니다.

sudo arp-scan --localnet | grep 10 | cut -c1-12 | xargs -I{} -n1 ssh -tt myuser@{}

둘 다 참고하세요매개변수그리고SSH이 명령이 제대로 작동하려면 몇 가지 추가 플래그가 필요합니다. 특히 주목할 점은 SSH 클라이언트가 파이프에서 표준 입력을 받을 때 -tt원격 호스트에 PTY 할당을 강제하기 위해 플래그를 SSH로 전달해야 한다는 것입니다.

명령 대체 및 쉘 변수 사용

또는 정확히 단일 IP 주소를 캡처하는 경우 쉘 변수에 결과를 캡처하고 올바른 호스트에서 SSH를 호출하면 됩니다. 예를 들어 Bash 셸을 사용하면 다음과 같습니다.

host_ip=$(sudo arp-scan --localnet | grep 10 | cut -c1-12)
ssh "myuser@${host_ip}"

이 접근 방식의 가장 큰 장점은 디버깅이 더 쉽다는 것입니다. 그러나 마일리지는 다를 수 있습니다.

답변2

  • 첫 번째 문제는 실행을 시도하고 있다는 것입니다 ssh myuser@ x.y.z.t(여기서 xyzt는 인식된 IP 주소입니다). 작동하지 않습니다. 필요합니다(네트워크와 IP 주소 사이에 공백이 없습니다). 시도해 볼 수 있습니다.ssh [email protected]myuse@sudo arp-scan --localnet | grep ... | sed -e 's/^/myuser@/' | xargs ssh

  • 두 번째 문제는 ssh표준 입력이 터미널이 아니라고 불평하면서 대화형 세션이 설정되지 않는다는 것입니다. 만족스러운 상태를 유지하려면 ssh명령 대체에서 IP 주소를 선택해야 합니다.

    ACCOUNTNAME=myuser
    MACADDRESS=00:50:56:3a:8d:1e
    ssh "$ACCOUNTNAME@$(
      sudo arp-scan --localnet |
      grep "$MACADDRESS" |
      cut -c 1-15
    )"
    

grep표시된 내용은 단지 예일 뿐이며 실제로 전체 MAC 주소를 사용할 수 있기를 바랍니다 .

grep특정 MAC 주소에 해당하는 IP 주소를 찾을 수 없는 경우 오류 처리 코드를 추가할 수 있습니다 .

관련 정보