내가 구성한 두 계정에 대한 ssh-agent의 동작이 약간 일치하지 않는 것 같습니다.
우리가 실행 중인 일부 VM의 가용성을 확인하기 위해 간단한 모니터링 스크립트를 작성했습니다. 기본 액세스 계정으로 모든 테스트와 디버깅을 수행했습니다. 그 과정에서 SSH 키 쌍을 생성하고, ssh-agent를 시작하고, 에이전트에 ID를 추가하여 암호 없이도 스크립트가 SSH에 접속할 수 있도록 했습니다.
이제 서비스 계정 사용자로 이 스크립트를 실행하고 싶습니다. 서비스 계정을 생성하고 키를 생성하기 위해 일시적으로 로그인 셸을 /bin/bash로 설정했습니다. 키를 생성하고 암호를 제거한 후 에이전트에 ID를 추가했습니다.
쉘이 에이전트에 연결되는 방식에 차이가 있는 것 같습니다. 내 사용자 계정에서는 테스트를 시작한 이후(약 2주) 에이전트를 다시 시작할 필요가 없었습니다. 그런데 서비스 계정으로 스크립트를 실행하려고 하면 매번 에이전트를 다시 시작하고 ID를 추가한 후 작업을 수행해야 하는 것 같습니다.
이상적으로는 에이전트가 무기한 실행되고 스크립트가 실행될 때마다 서비스 계정이 자동으로 다시 연결되도록 하여 스크립트 내에서 프로세스를 관리할 필요가 없도록 하고 싶습니다. 각 계정의 구성을 살펴봤지만 차이점을 찾을 수 없습니다. 어떤 통찰력이라도 대단히 감사하겠습니다.
**편집: 에이전트가 계속 실행되지만 서비스 계정의 셸 프로세스가 이를 활용하지 않는 것 같으며 새 프로세스를 시작해야 한다는 점을 지적하는 것을 잊었습니다.
ovmmon 14043 0.0 0.0 53916 204 ? Ss May17 0:00 ssh-agent
ovmmon 14952 0.0 0.0 53916 204 ? Ss May17 0:00 ssh-agent
답변1
여기서는 두 가지 중 하나가 발생합니다.
- 로그아웃하면 ssh-agent가 실제로 닫힙니다.
- ssh-agent가 계속 실행 중이지만 PID 및 파이프에 대한 정보가 손실됩니다.
ps -ef를 수행하고 ssh-agent를 확인하여 어떤 경우인지 확인할 수 있습니다.
ssh-agent가 죽은 경우 이를 활성 상태로 유지할 방법이 필요합니다. 이를 수행하는 세 가지 방법은 다음과 같습니다.
- 서버가 부팅될 때 시작 스크립트에서 ssh-agent를 시작하고 출력을 파일에 에코할 수 있습니다(오용을 방지하기 위한 적절한 액세스 권한 포함). 키를 비밀번호 없이 만들면 스크립트에서도 키를 추가할 수 있습니다. (분명히 마지막 부분은 연결하려는 계정이 원격 서버에 대해 매우 제한된 권한을 가지고 있는 경우에만 권장됩니다.) 그런 다음 스크립트가 시작 시 생성된 파일에서 SSH 에이전트 정보를 읽도록 합니다.
- 서비스 계정에 로그인할 때 화면을 사용하세요. 그런 다음 에이전트를 시작한 후 화면 세션 연결을 끊습니다.
- 에이전트를 시작할 때 nohup을 사용하십시오.
ssh-agent가 죽지 않았지만 환경 정보를 잃어버린 경우 시작할 때 환경 변수를 특정 파일에 기록하는지 확인하십시오. 그런 다음 로그인할 때 해당 파일의 쉘 소스를 확보하십시오.
답변2
하위 쉘 호출 방법을 사용하는 경우 쉘 로그아웃 시 ssh-agent가 종료됩니다. 평가 방법을 사용하는 경우 쉘은 수동으로 종료될 때까지 계속 실행됩니다.
보다:http://docstore.mik.ua/orelly/networking_2ndEd/ssh/ch06_03.htm
구체적으로:http://docstore.mik.ua/orelly/networking_2ndEd/ssh/ch06_03.htm#ch06-50031.html
또한 cron ENV 변수에서 실행할 때 문제가 발생할 수 있다는 것을 알고 있습니다. 그래서 그것은 확인해야 할 또 다른 영역입니다.