시작 시 자동으로 역방향 SSH 연결 설정

시작 시 자동으로 역방향 SSH 연결 설정

내 Digitalocean VPC에 대한 역방향 SSH 연결이 있는 NAT 뒤에 PC가 있습니다. 저는 이 역방향 SSH 연결을 활용하여 집에서 사무실 PC에 로그인하고(권한이 있음) 파일을 복사하고 기타 중요한 작업을 수행합니다.

흔하지는 않지만 사무실 PC가 재부팅되고(정전 등으로 인해) 내 VPC에 대한 역방향 SSH 연결이 끊어지는 것을 발견했습니다. 이 경우 집 컴퓨터에서 사무실 컴퓨터로 연결할 수 없습니다.

다음 스크립트를 실행하여 역방향 연결 + 동적 프록시를 수행하여 내 사무실 컴퓨터에서 생성하는 트래픽을 익명화합니다(검색 정보를 공유할 필요가 없기 때문에).

autossh -CD 8080 -i digitalOcean -R 8081:localhost:22 root@IPofDigitalOceanPC

실제로 사무실 컴퓨터에 없기 때문에 재부팅 후 사무실 컴퓨터에서 스크립트를 다시 실행할 수 없습니다. 이 문제를 해결하기 위해 다음 crontab을 설치했습니다.

참고: rev.sh파일에는 위의 줄이 포함되어 있습니다. "digitalOcean" 인증서와 rev.sh는 에 있습니다 Ubuntu home. 따라서 ./rev.shUbuntu 터미널에서 실행하면 동적 프록시를 얻고 ym DigitalOcean 서버에도 액세스할 수 있습니다. 이 방법은 100% 효과적입니다.

그러나 다음과 같이 chrontab을 설치하면 내 우분투 PC는 동적 프록시를 생성하지 않습니다. Google Chrome에서 이 프록시를 확인할 때 프록시가 연결을 거부했다고 표시되기 때문에 이를 볼 수 있습니다.

다음은 루트 cronejob으로 시도한 cronejob입니다. 나는 또한 일반 사용자로서 이것을 시도했지만 여전히 작동하지 않습니다.

@reboot bash /home/user/rev.sh 
@reboot /home/user/rev.sh 
@reboot cd /home/user && ./rev.sh

그런 다음 현재 시간 몇 분 전에 chrontab을 설치하고 실행될 때까지 기다렸습니다.

24 12 8 * * * bash /home/user/rev.sh
24 12 8 * * * /home/user/rev.sh

이것들도 시행되지 않았습니다.

내 오류를 발견하도록 친절하게 도와주세요. 이 사이트에는 내 문제와 유사한 질문이 많이 있습니다. 그래서 많은 답변을 참고했지만 그 중 어느 것도 도움이 되지 않는 것 같습니다.

답변1

cron시작 시 스크립트를 실행하는 것이 좋은 생각인지 잘 모르겠습니다 . 내 생각에 더 적합하다고 생각되는 또 다른 옵션은 아래 설명된 대로 SystemD 서비스를 만드는 것입니다.여기. 다음이라는 파일을 만듭니다 /etc/systemd/system/autossh.service.

[Unit]
Description=Auto Reverse SSH
Requires=systemd-networkd-wait-online.service
After=systemd-networkd-wait-online.service
[Service]
ExecStart=/full/path/to/autossh -CD 8080 -i digitalOcean -R 8081:localhost:22 root@IPofDigitalOceanPC
[Install]
WantedBy=multi-user.target

그런 다음 루트로 다음 명령을 실행합니다.

systemctl enable autossh.service

답변2

시도해 볼 수 있는 몇 가지 작업은 다음과 같습니다.

chmod +x rev.sh

때로는 시작 시 또는 cronjob을 통해 경로가 완전히 설정되지 않아 내 시스템에서 autossh를 전체 경로로 교체했습니다.

/usr/bin/autossh

@reboot 주제는 cron 데몬이 시작되는 시점에 따라 달라지므로 다른 하위 시스템(네트워킹?)이 시작되어 실행되기 전에 호출될 수 있습니다.

그리고 crontab 예는 다음과 같습니다.

24 12 8 * * * bash /home/user/rev.sh

매월 8일에만 호출됩니다. 추가 필드가 있습니다. 노력하다

24 12 * * * /home/user/rev.sh

답변3

crontab을 통해 스크립트를 실행할 때 인증서를 찾을 수 없는 것 같습니다.

사용자로 스크립트를 실행하면 /home/ubuntu-user/.ssh/... 의 인증서가 사용됩니다. 그러나 스크립트가 crontab에서 실행되면 루트로 실행됩니다. 루트는 /root/.ssh에서 인증서를 가져옵니다.

따라서 작동하게 하는 방법은 여러 가지가 있지만 스크립트를 실행하는 것 같습니다.crontab의 우분투 사용자할 수 있다.

편집하다:

인증서에 대한 정규화된 경로를 제공해야 합니다.

답변4

질문에 데이터가 많지 않기 때문에 무엇을 할지 처음부터 시작하겠습니다.

모든 구성을 /etc/ssh/ssh_config에 넣습니다.

 Host mytunnel
    HostName      IPofDigitalOcean
    User          root     # Are you sure about this??
    IdentityFile  /etc/ssh/mytunnel_key
    RemoteForward 8081 localhost:22
    DynamicForward 8080

열쇠는 내가 넣어둘게/etc/ssh/mytunnel_key

그런 다음 다음과 같이 cron 항목을 사용해 보겠습니다(upstart/systemd 서비스가 더 좋습니다).

@reboot /usr/bin/autossh -f -M 0 -T -N mytunnel

관련 정보