membuat koneksi SSH mundur otomatis saat boot

9

Saya memiliki PC di belakang NAT yang membuat koneksi SSH terbalik ke Digitalocean VPC saya. Saya menggunakan koneksi SSH terbalik ini dari rumah untuk login ke PC kantor saya (saya berwenang melakukannya) dan menyalin file dan melakukan hal-hal penting lainnya.

Meskipun tidak sering, saya perhatikan bahwa PC kantor saya restart (karena kegagalan daya dll) dan memutus koneksi SSH terbalik yang telah dibuat dengan VPC saya. Dalam kasus seperti ini, saya tidak dapat terhubung dari PC rumah saya ke PC kantor saya.

Saya menjalankan skrip berikut untuk membuat koneksi terbalik + proxy dinamis untuk menganonimkan lalu lintas saya (Karena saya tidak diharuskan berbagi informasi penelusuran) yang dihasilkan di PC kantor.

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

Tidak ada cara saya bisa menjalankan skrip ini lagi di PC kantor saya setelah restart karena saya secara fisik tidak ada. Untuk mengatasi masalah ini saya menginstal crontab berikut.

Catatan: rev.shfile berisi baris di atas. Sertifikat "digitalOcean" dan rev.sh terletak di Ubuntu home. Karena itu, ketika saya mengeksekusi ./rev.shdi terminal Ubuntu saya, saya memperoleh proxy dinamis dan juga akses ke server DigitalOcean ym. Metode ini bekerja 100%.

Namun ketika saya menginstal chrontab dengan metode berikut, PC ubuntu saya tidak pernah membuat proxy Dinamis. Saya dapat melihat ini karena ketika saya memeriksa proxy ini dari Google Chrome, katanya proxy menolak koneksi.

Inilah cronejobs yang saya coba sebagai root cronejobs. Saya juga mencoba ini sebagai pengguna biasa, tetap saja tidak berhasil.

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

Saya kemudian memasang chrontab beberapa menit sebelum waktu saat ini dan menunggu untuk mengeksekusi.

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

ini juga tidak mengeksekusi.

Mohon berbaik hati untuk membantu saya menemukan kesalahan saya. Ada banyak pertanyaan serupa di situs web ini tentang masalah saya. Saya telah merujuk banyak jawaban karena itu tetapi tidak satupun dari mereka yang membantu.

Denis
sumber
Saya tidak yakin apa masalah Anda di sini. Apakah cron tidak memulai pekerjaan apa pun? Atau skrip tidak berfungsi? Dengan kedua masalah tersebut, silakan, lihat log. Cron harus menulis di suatu tempat /var/log/cron*. Untuk tujuan pengujian, Anda cukup menulis sesuatu seperti */2 * * * * /path/to/script- ini akan menjalankan skrip setiap 2 menit. Juga periksa email untuk pengguna yang menjalankan cron. Apakah itu root? Gunakan mailperintah. Oh, saya dapat melihat bahwa Anda menggunakan kunci ssh? Saya ragu bahwa pekerjaan cron akan dapat menemukannya jika Anda tidak akan memberikan path lengkap ke sana setelah -iberalih.
Kalavan

Jawaban:

8

Saya tidak yakin apakah menggunakan cronuntuk menjalankan skrip pada startup adalah ide yang bagus. Alternatif yang saya anggap lebih cocok adalah membuat layanan SystemD, seperti dijelaskan di sini . Buat file dengan nama /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

Kemudian jalankan perintah berikut sebagai root:

systemctl enable autossh.service
Dmitry Grigoryev
sumber
1

Beberapa hal yang dapat Anda coba:

chmod +x rev.sh

Terkadang jalur Anda tidak sepenuhnya disetel saat boot atau melalui cronjobs, jadi ganti autossh dengan path lengkap, di sistem saya yang

/usr/bin/autossh

Motif @reboot bergantung pada waktu startup daemon cron, oleh karena itu dapat dipanggil sebelum subsistem lain (jaringan?) aktif dan berjalan

Dan contoh crontab Anda:

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

hanya akan memohon pada tanggal 8 setiap bulan. Dan itu memiliki bidang tambahan. Mencoba

24 12 * * * /home/user/rev.sh
slowko
sumber
maaf itu kesalahan. Saya memang mencoba '24 12 * * * /home/user/rev.sh 'tetapi masih berhasil. Yang mengejutkan saya, bahkan '24 12 * * * reboot 'tidak berfungsi.
Denis
1
Yah reboot tentu tidak akan berfungsi kecuali jika Anda memanggil sebagai root.
slowko
Saya mencoba menambahkan / usr / bin / autossh. Tidak berfungsi.
Denis
Saya mencoba 24 12 8 * * * reboot di root crontab. Tidak berfungsi. Apakah itu berhasil pada Anda?
Denis
/usr/binselalu dalam keadaan default PATH, bahkan untukcron
roaima
1

Tampaknya, bahwa ketika skrip dieksekusi melalui crontab, ia tidak dapat menemukan sertifikat Anda.

Ketika Anda sebagai pengguna menjalankan skrip, ia menggunakan sertifikat dari /home/ubuntu-user/.ssh / ... Namun ketika skrip dieksekusi dari crontab, ia dijalankan sebagai root. root mengambil sertifikat dari / root / .ssh

Jadi Anda memiliki banyak cara untuk membuatnya bekerja, tapi saya pikir menjalankan skrip seperti yang dilakukan pengguna Ubuntu di crontab .

Edit:

pastikan untuk menyediakan jalur yang memenuhi syarat penuh untuk sertifikat

syss
sumber
1

Coba gunakan su:

su -l user -c /home/user/rev.sh

Apakah ini akan membantu masalah Anda?

Fedor Dikarev
sumber
0

karena pertanyaan tidak memiliki begitu banyak data di dalamnya, saya akan mulai dari awal dengan apa yang akan saya lakukan

Saya akan meletakkan semua konfigurasi di / 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

Saya akan memasukkan kunci /etc/ssh/mytunnel_key

maka saya akan mencoba dengan entri cron (layanan pemula / systemd akan lebih baik) seperti ini:

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

Anda perlu menggunakan -f dan menjalankan perintah ketika Anda menjalankan tanpa terminal. Jadi inilah sebuah contoh:

autossh -M 12374 \
-R 2205:127.0.0.1:22 \
-p 2200 \
-f \
[email protected] \
sleep 31536000

-f menempatkannya di latar belakang, tetapi menempatkannya di latar belakang berarti ssh akan terhubung, lalu lepaskan segera setelah itu menyelesaikan tugasnya. Jadi kamu butuh tugas.

sleep 31536000 memberitahu ssh untuk menjalankan "sleep" selama 1 tahun setelah terhubung. Selama waktu ini, terowongan Anda akan tetap ada.

Jika Anda tidak menjalankan perintah, ssh akan terhubung, mengatur terowongan terbalik pada port 2205, dan ketika selesai dengan itu, ia akan keluar. Menggunakan autossh, jika koneksi gagal, itu akan menyambung kembali dan memulai kembali tidur. Bahkan dengan koneksi internet yang sangat stabil, saya ragu setahun mungkin.

BTW - tidak seperti pelawak lain ini, saya tahu ini bekerja, karena saya benar-benar mengujinya karena tentu saja saya melakukan sesuatu yang serupa dan karena saya membuatnya bekerja sekarang, dengan sangat andal, saya dapat memberikan jawaban yang benar.

-f dan "perintah"

Itu yang Anda lewatkan.

Jimminy Doe
sumber
1
Saya tidak berpikir kita perlu memanggil nama orang lain di sini.
Jeff Schaller
1
Saya tidak memanggil nama orang lain. Saya menunjukkan solusi yang disarankan sebelumnya tidak pernah dicoba oleh orang-orang yang menyarankan mereka. Tidak percaya padaku Coba mereka.
Jimminy Doe
1
Saya tidak berpikir Anda telah membahas titik pertanyaan, baik - klaim OP Metode ini berfungsi 100% . Saya percaya pertanyaan mereka terpusat di sekitar menjalankan skrip mereka dengan cara otomatis setelah PC mereka restart.
Jeff Schaller
1
Jika dia sedang bekerja, dia dapat mengatur terowongan terbalik ke rumah, karena OP berjalan di terminal - ITU bekerja 100% dari waktu. Program ssh (dan autossh) bertindak secara berbeda jika mereka tidak memiliki terminal yang terkait dengan proses. Dia memiliki masalah memiliki crontab (yang berjalan tanpa terminal) menyambung kembali terowongan, justru karena dia tidak menggunakan -f, dan bahkan jika ia adalah, ssh akan keluar setelah terowongan yang setup, tanpa menjalankan sesuatu - dalam kasus saya, saya pergi lari tidur, selama satu tahun. Dalam skrip -f harus digunakan DENGAN PERINTAH yang mencegah SSH keluar. Itu masalahnya.
Jimminy Doe
1
Saya kira itu Anda, Jeff Schaller, yang telah memberi saya downvote, untuk memberikan solusi yang benar dan benar-benar mengujinya. Saya pada dasarnya melakukan setup yang persis sama, kecuali saya mengatur PI untuk melalui firewall, dan startup rdesktop, dan memberikannya kepada manajer kantor kami, yang tidak tahu apa-apa tentang Linux, untuk menggunakannya . Cukup yakin saya memiliki solusi antipeluru, karena saya menggunakannya sekarang, dan saya telah mem-boot ulang pi saya dari jarak jauh, dan modem kabel lokal saya - hanya untuk aman .. Tapi ya, jangan biarkan jawaban yang benar masuk cara ego yang berlebihan, tidak berpenghasilan.
Jimminy Doe