언제든지 공용 서버를 통해 개인 서버에 SSH로 연결할 수 있도록 개인 서버와 방화벽 뒤의 공용 서버 사이에 영구 SSH 터널을 설정해야 합니다.
개인 서버에서 수동으로 이 작업을 수행하면
ssh -R 6666:localhost:22 username@public_host
모든 것이 정상입니다. 그런데 crontab -e
재부팅 시 터널이 자동으로 재설정되도록 이 줄을 입력하면 작동하지 않습니다. 무슨 문제가 있는지 아시나요?
노트:서버 간의 공개/개인 키 쌍이 설정되어 제대로 작동합니다.
답변1
autossh를 사용하면 이 작업이 자동으로 수행됩니다. 수동으로 시작하거나 다시 시작할 필요가 없는 지속적인 연결을 위해 설계되었으며, 자체 모니터링이 가능하고 일반 SSH 클라이언트처럼 터널링 작업을 수행할 수 있습니다.
답변2
ssh
세션 컨텍스트 외부에서 명령을 실행하고 있으므로 일반적으로 사용 가능한 일부 항목이 누락될 수 있습니다 .
아마도 인증을 위해 키를 사용하고 있을 것입니다. 크론 작업에서 키를 얻을 수 있나요?
- 키 파일이 비밀번호로 보호되어 있으면 비밀번호를 입력하지 않았기 때문에 키를 사용할 수 없습니다. 비밀번호를 입력하더라도 해당 키는 세션키 에이전트의 메모리에 보관됩니다.
ssh
세션에서 실행된 명령은 환경 변수를 통해 키 에이전트에 연결하는 방법을 알고 있지만SSH_AUTH_SOCK
crontabssh
에서 실행된 명령에는 이 변수가 없습니다. - 홈 디렉터리가 암호화된 경우 해독된 홈 디렉터리가 아직 설치되지 않았으므로 시작 시 키 파일을 사용할 수 없습니다. 해독된 홈 디렉토리는 해독된 비밀번호를 입력할 때까지 마운트할 수 없습니다.
키가 어떤 방식으로든 비밀번호로 보호되어 있다는 것이 문제인 경우 비밀번호를 입력하기 전에는 터널을 설정할 수 없습니다. 두 가지 해결책이 있습니다.
- 세션이 터널 설정을 시작할 때까지 기다리십시오. 이는 설정의 보안을 유지하지만 나중에까지 터널을 사용할 수 없음을 의미합니다. 세션 시작 스크립트에 터널 설정을 추가할 수 있습니다.
- 터널은 디스크에 일반 텍스트로 저장된 개인 키를 사용하여 설정됩니다.