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.sh
file berisi baris di atas. Sertifikat "digitalOcean" dan rev.sh terletak di Ubuntu home
. Karena itu, ketika saya mengeksekusi ./rev.sh
di 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.
sumber
/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? Gunakanmail
perintah. 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-i
beralih.Jawaban:
Saya tidak yakin apakah menggunakan
cron
untuk 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
:Kemudian jalankan perintah berikut sebagai root:
sumber
Beberapa hal yang dapat Anda coba:
Terkadang jalur Anda tidak sepenuhnya disetel saat boot atau melalui cronjobs, jadi ganti autossh dengan path lengkap, di sistem saya yang
Motif @reboot bergantung pada waktu startup daemon cron, oleh karena itu dapat dipanggil sebelum subsistem lain (jaringan?) aktif dan berjalan
Dan contoh crontab Anda:
hanya akan memohon pada tanggal 8 setiap bulan. Dan itu memiliki bidang tambahan. Mencoba
sumber
/usr/bin
selalu dalam keadaan defaultPATH
, bahkan untukcron
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
sumber
Coba gunakan
su
:Apakah ini akan membantu masalah Anda?
sumber
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:
Saya akan memasukkan kunci
/etc/ssh/mytunnel_key
maka saya akan mencoba dengan entri cron (layanan pemula / systemd akan lebih baik) seperti ini:
sumber
Anda perlu menggunakan -f dan menjalankan perintah ketika Anda menjalankan tanpa terminal. Jadi inilah sebuah contoh:
-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.
sumber