원격 서버를 sshpassing하고 grep 결과를 얻기 위한 쉘 스크립트

원격 서버를 sshpassing하고 grep 결과를 얻기 위한 쉘 스크립트

sshpass를 사용하여 원격 서버 명령의 결과를 얻기 위해 몇 가지 스크립트를 작성 중입니다.

여러 원격 호스트를 시도하기 전에 명령 결과를 얻기 위해 하나의 테스트 서버로만 테스트를 시도했습니다.

이 명령은 호스트에 사용자가 존재하는지 확인하는 데 사용됩니다. 사용자가 존재하면 결과를 인쇄하고 싶습니다. 그래서 아래와 같이 코딩했습니다.

#!/bin/bash
exec sshpass -pMY_PASSWORD ssh -o StrictHostKeyChecking=no root@IP_ADDRESS grep USER /etc/passwd | cut -f1 -d:

if [ $? -ne 0 ]
    then 
        echo "command failed..."
        exit 1
fi

하지만 위 스크립트를 시도하면 일부 서버 로그인 메시지와 아래 오류가 인쇄됩니다.

basename: extra operand `tty'
Try `basename --help' for more information.
basename: extra operand `tty'
Try `basename --help' for more information.

사용자가 존재하고 이러한 오류가 없는 경우에만 결과를 얻고 싶습니다.

누구든지 도와줄 수 있나요?

답변1

원격 서버의 로그인 셸 구성 파일에 있는 코드는 이러한 비대화형 로그인을 처리하기에는 제대로 작성되지 않았습니다. 이 문제를 해결하면 basename문제가 tty해결됩니다. (원격 시스템에서 일시적으로 루트의 이름을 바꾸고 .profile자신 .bash_profile의 것을 사용해 보십시오 . 여전히 오류가 발생하면 시스템 로그인 스크립트에 있는 것입니다. 그렇지 않은 경우 루트의 로그인 스크립트에 있는 것입니다. with 의 사용을 ssh -o StrictHostKeyChecking=no root@IP_ADDRESS id보호하지 못할 수도 있습니다 .)tty[ -t 1 ] && ...

exec그러나 이를 사용하여 프로그램 을 실행 하므로 sshpass우리에게 보여준 나머지 스크립트는 실행되지 않습니다. 제거하다 exec. (실제로 사용해야 하는 이유를 알기 전까지는 절대 사용하지 마십시오.) 그러나 그렇게 하더라도 성공을 테스트하는 다음 코드는 파이프라인의 마지막 명령 결과만 확인합니다. cut, 실패할 확률이 매우 낮습니다.

인증서 기반 인증 sshpass대신 내장된 일반 텍스트 비밀번호를 사용하는 특별한 이유가 있나요?ssh

권한이 없는 계정이 아닌 루트로 원격 시스템에 로그인한 특별한 이유가 있나요?

관련 정보