명령이 직접 호출되면 ssh가 중단되지만 대화 형으로 실행하면 깨끗하게 종료됩니다.

StackOverflow https://stackoverflow.com/questions/33475

  •  09-06-2019
  •  | 
  •  

문제

원격 머신에서 서버를 시작하고 서버 프로세스가 사이트를 생성하는 포트 번호를 검색해야합니다.호출되면 서버는 임의의 포트를 수신하고 stderr에 포트 번호를 출력합니다.

원격 머신에 로그온하고, 프로세스를 시작하고, 포트 번호를 검색하는 프로세스를 자동화하고 싶습니다.작업을 호출 한 다음 포트 번호를 반환하는 래퍼 역할을하기 위해 원격 시스템에있는 "invokejob.py"라는 Python 스크립트를 작성했습니다. 다음과 같습니다. 라코 디스

대화식으로 로그인하면 다음 스크립트가 작동합니다. 라코 디스

(참고 : 로그 아웃 성공, 중단되지 않음)

그러나 명령 줄에서 호출하려고하면 중단됩니다. 라코 디스

두 번째 경우에 중단되는 이유와이를 방지하기 위해 내가 무엇을 할 수 있는지 아는 사람이 있습니까?

프로그램의 출력을 검색해야하므로 ssh "-f"플래그를 사용하거나 표준 출력을 리디렉션 할 수 없습니다.

도움이 되었습니까?

해결책

<인용구> 라코 디스

위 줄인 것 같습니다.ssh를 통해 직접 명령을 호출하면 전체 pty (Linux 가정)를 얻지 못하므로 읽을 수있는 stderr가 없습니다.

대화식으로 로그인하면 stdin, stdout 및 stderr가 설정되어 스크립트가 작동합니다.

다른 팁

@ 벤 콜린스

stderr이 문제라는 점에 대해 당신이 옳다고 생각합니다.나는 그것이 readline () 호출을 차단하고 있다고 확신합니다.

결국 포기하고 pexpect 의 pxssh 모듈을 사용하여 상호 작용을 자동화하기로 결정했습니다.ssh 세션

@Misha M

안타깝게도 세미콜론 트릭은 여기서 작동하지 않습니다. 내 프로그램 실행을 차단합니다.

다음을 수행하면 어떻게 되나요?

ssh <remote host> '<your command> ;<your regexp using awk or something>'

ssh <remote host> '<your program>; ps aux | awk \'/root/ {print $2}\''

이는 사용자 루트 또는 설명에 루트가있는 프로세스에 대한 각 PSID에 연결하고 실행 한 다음 인쇄합니다.

원격 컴퓨터에서 모든 종류의 명령을 실행하는 데이 방법을 사용했습니다.실행하려는 명령을 작은 따옴표 ( ')로 묶고 각 명령을 세미콜론 (;)으로 구분하는 것이 문제입니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top