내 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.sh
Ubuntu 터미널에서 실행하면 동적 프록시를 얻고 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