>  기사  >  Java  >  Java에서 JSch를 통해 Unix 명령을 실행할 때 '찾을 수 없음' 오류와 함께 실패하는 이유는 무엇입니까?

Java에서 JSch를 통해 Unix 명령을 실행할 때 '찾을 수 없음' 오류와 함께 실패하는 이유는 무엇입니까?

Patricia Arquette
Patricia Arquette원래의
2024-11-12 00:33:02981검색

Why do Unix commands fail with

JSch를 통한 "찾을 수 없음" 오류로 인해 Unix 명령 실행 실패

Java에서 JSch 라이브러리를 통해 특정 Unix 명령을 실행하려고 하면, 사용자는 명령을 찾을 수 없다는 오류가 발생할 수 있습니다.

문제 이해

대화형 SSH 클라이언트와 달리 JSch의 "exec" 채널은 의사 클라이언트를 할당하지 않습니다. 기본적으로 터미널(PTY)입니다. 이러한 환경 차이로 인해 대화형 세션에 비해 시작 스크립트 실행 및 PATH 설정이 달라질 수 있습니다. 결과적으로 특정 환경 변수에 의존하는 명령이 실패할 수 있습니다.

근본 원인 식별

근본 원인을 확인하려면 SSH 클라이언트에서 PTY 할당을 비활성화하고 다음을 시도하십시오. 명령을 수동으로 실행하십시오. 동일한 "찾을 수 없음" 오류가 발생하는 경우 대화형 세션과 비대화형 세션 간에 PATH 환경 변수가 다르다는 의미입니다.

해결책

이 문제를 해결하려면 , 선호도에 따라 다음 솔루션을 고려하세요.

1. 실행 파일 경로를 명시적으로 정의하도록 명령 수정

String command = "/bin/air sandbox run <graph-path>";

2. 시작 스크립트를 조정하여 PATH를 일관되게 설정

원격 서버의 시작 스크립트에서 대화형 세션과 비대화형 세션 모두에 대해 PATH가 동일하게 설정되어 있는지 확인하세요.

3. 로그인 셸을 사용하여 명령 실행

일반적으로 일관된 환경을 설정하는 로그인 셸을 통해 명시적으로 실행하려면 명령 앞에 "bash --login -c"를 추가하세요.

String command = "bash --login -c \"air sandbox run <graph-path>\"";

4. 명령에서 직접 환경 변수 설정

특정 환경 설정에 크게 의존하는 명령의 경우 다음 명령에서 직접 변수를 설정하는 것이 좋습니다.

String command = "PATH=\"$PATH;/path/to/air\" && air sandbox run <graph-path>";

5. 강제 PTY 할당(권장하지 않음)

최후의 수단으로 .setPty(true)를 사용하여 "exec" 채널에 대한 PTY 할당을 강제할 수 있습니다. 그러나 이 접근 방식은 원하지 않는 부작용을 초래할 수 있습니다.

추가 정보 및 유사한 문제에 대해서는 다음 리소스를 참조하십시오.

  • 특정 Unix 명령이 "... 찾을 수 없음"으로 인해 실패합니다. , setPty가 활성화된 상태에서도 JSch를 사용하여 Java를 통해 실행될 때
  • JSch를 사용하여 실행된 명령은 SSH 터미널에서와 다르게 동작합니다("yes/"no" 확인 프롬프트 메시지 우회)
  • JSch: 존재합니까? 사용자 환경 변수를 "exec" 채널에 노출하는 방법이 있습니까?
  • SSH.NET SshClient.RunCommand로 실행된 명령(.4gl)이 "해당 파일 또는 디렉터리가 없습니다"라는 메시지와 함께 실패합니다

위 내용은 Java에서 JSch를 통해 Unix 명령을 실행할 때 '찾을 수 없음' 오류와 함께 실패하는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.