cronjob을 연 후 즉시 SSH 터널을 닫습니다.

cronjob을 연 후 즉시 SSH 터널을 닫습니다.

공용 서버에 대한 SSH 터널을 여는 스크립트를 작성하려고 합니다. 모든 내용을 올바르게 작성하고 작동하고 있지만 서버에 연결되지 않는 것 같습니다. 로그에는 다음과 같은 내용이 나와 있습니다.

Jun 8 21:00:01 <hostname> CRON[xxxx]: session opened for user <user> by (uid=0)
Jun 8 21:00:01 <hostname> CRON[xxxx]: session closed for user <user>

0~1초 간격으로 계속 반복됩니다. 나는 이 연결이 열려 있다고 말하고 싶습니다.... 이것을 어떻게 열어 둘 수 있습니까?

내 코드는 cron에 대해 다음과 같습니다(예, 매분 실행된다는 것을 알고 있습니다).

* * * * * /bin/bash /home/<user>/ssh

내 체크인 코드는 다음과 같습니다.

sshpass -p <password> ssh -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null <user>@<url> -p <port> -R222<random_number>:localhost:22

그럼, 어떻게 하면 이 연결을 열어둘 수 있을까요? 다른 스크립트에는 적절한 시간에 이를 종료하는 메커니즘이 있지만 명령줄에서 위 명령을 수동으로 실행하지 않으면 cron이 즉시 이를 종료합니다.

답변1

crontab 스크립트에 몇 가지 실수가 있습니다.

  1. 연결 끊김을 일으키는 원인은 스크립트에 실행 권한뿐만 아니라 suid 비트 세트(sudo chmod 4755 /pah/to/script)만약에쉘 스크립트를 루트로 실행하고 있습니다.

  2. crontab 환경은 사용자 환경과 매우 다릅니다. 따라서 항상 사용해야합니다.전체 경로명령에:

    /usr/bin/sshpass -p <password> /usr/bin/ssh -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null <user>@<url> -p <port> -R222<random_number>:localhost:22
    
  3. 플래그를 추가해야합니다-t -t~로SSH명령(예, 두 번)을 실행하면 tty를 할당할 수 없다는 오류가 억제됩니다.

  4. 이전 오류는 확실하지만 한 가지 오류가 있습니다.~할 것 같다문제를 일으킬 수 있는지 잘 모르겠고 시도해 볼 시간도 없습니다. 두 가지가 있습니다.-피명령에 플래그가 포함되어 있는데 쉘에서 올바르게 해석되는지 잘 모르겠습니다. 내가 당신이라면, 나는SSH명령을 모든 옵션과 함께 작은따옴표나 큰따옴표로 묶어서 시도해 보세요.

암호화 키를 사용한다면 이전 반대와 개방형 비밀번호 사용을 피할 수 있습니다..ssh/config다음 줄을 제출하십시오.

   Host ShortName
             HostName The.Full.HostName.com
             User yourname
             Port your-non-standard-port
             IdentityFile /path/to/crypto/keyù
             IdentitiesOnly yes

그러면 단 하나의 라이너가 될 것입니다

  /usr/bin/ssh -t -t -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null -R222<random_number>:localhost:22 ServerName

관련 정보