Saya mencoba untuk membangun file batch Windows, yang mulai putty / plink dengan port forwarding, dan tidak ada yang lain. Bagian Windows siap sejauh ini:
start plink.exe -ssh -i key.ppk -L 1234:localhost:80 sampleUser@192.168.0.1
Karena saya tidak ingin mengizinkan untuk mengeksekusi perintah lain setelah otentikasi, saya menggunakan ForceCommand
dengan Match User
deklarasi:
Match User sampleUser
ForceCommand echo 'Success! Close this window to log out.'
Masalahnya, menjalankan file batch saya mulai dempul dengan benar, tetapi menutup segera setelah mengeksekusi gema teks yang saya tentukan.
Ide saya adalah menggunakan sesuatu seperti ini:
ForceCommand echo 'Success! Close this window to log out.' && waitTillControlC
Dengan cara ini, putty / SSH harus menjaga koneksi tetap hidup dan tidak keluar dari port forwarding saya.
Saya sudah memikirkan perintah seperti yes
, ping
atau read
, tetapi mereka
- mengirim spam ke jendela terminal saya
- sebenarnya melakukan hal-hal / menghasilkan beban CPU yang tidak perlu
- bisa menutup secara tak terduga, jika seseorang menekan masuk
Apakah ada perintah yang tidak akan melakukan apa pun, selamanya, sampai seseorang mengakhiri dengan Ctrl + C atau menutup koneksi SSH dengan menutup jendela dempul?
Apa yang harus saya gunakan waitTillControlC
?
Jawaban:
Saya tidak mengerti mengapa semua balasan lainnya ingin menggunakan loop di sini, tidur dapat menunggu cukup lama untuk tujuan praktis dan tidak akan menggunakan siklus clock melakukannya.
Misalnya, ia akan mencoba tidur selama 100 tahun yang meragukan dan kemungkinan akan melakukannya cukup untuk memenuhi permintaan:
Atau, ini juga harus diblokir hingga Anda mengetikkan Enterkunci:
sumber
Coba
-N
opsi tersebut. Dariplink
dokumentasi :Ini adalah perilaku yang sama dengan
ssh
opsi-N
, seperti yang dijelaskan dalam halaman manual :sumber
I don't want to allow to execute other commands after authentication
.-N
akan melakukan ini di sisi klien, jadi Anda bisa menghapus -N untuk menjalankan perintah lain setelah otentikasi.Ini harus tidur selamanya tanpa mengkonsumsi jumlah daya CPU (nyata).
Saya juga tidak yakin apakah Anda dapat memberikan perintah seperti dalam
ForceCommand
klausa. Anda mungkin perlu memasukkan perintah ke skrip shell.Skrip ini tentu saja harus ada di tempat dan memiliki izin sehingga tidak ada pengguna biasa di server yang dapat menulisnya.
Edit
Saya telah menemukan perintah yang tampaknya lebih elegan:
tail -f
menunggu file atau streaming untuk mengembalikan byte. (Jika tidak berguna untuk menonton log secara realtime.) Tidak/dev/null
akan pernah mengembalikan byte. Maka perintah itu akan tidur selamanya.sumber
ForceCommand echo 'congrats' && while true; do sleep 9999; done
tail -f /dev/null
secara teknis lebih buruk daripada loop 9999. Prosesnya akan bangun setiap detik alih-alih setiap 2 jam dan 56 menit.inotify
salah?tail
dioptimalkan untuk memanfaatkaninotify
ketika tersedia. Ini harus menjadi kasus default dengan sebagian besar atau tidak semua distribusi yang cukup baru. Namun, saya hanya menguji pada laptop Linux dan mengamati aktivitas palsu dengantail
pemantauan/dev/null
sehingga tentu saja lebih buruk dari itu dalam hal siklus clock.tail
akan selalu bangun setiap detik. Alasan yang memungkinkan untuk hasilnya adalah Anda menjalankannya di terminal yang mungkin berkomunikasi dengantail
alasan apa pun, sedangkansleep
tidak. Tidak ada alasan mengapatail
harus bangun hanya pemantauan/dev/null
.Anda bisa mencoba yang berikut ini:
sumber
sleep
Periode yang lebih lama akan lebih mudah pada CPU, meskipun bahkansleep 1
harus cukup aman pada apa pun yang dibangun dalam dua dekade terakhir ...:
adalah singkatan untuktrue
. Saya juga lebih sukasleep
periode yang lebih lama dari prinsip.Anda mencoba menyelesaikan ini dari ujung yang salah. Anda tidak ingin shell tidak keluar, Anda ingin dempul membiarkan jendela terbuka.
http://the.earth.li/~sgtatham/putty/0.60/htmldoc/Chapter4.html#config-closeonexit - menjelaskan dengan tepat apa yang perlu Anda ubah. Jika Anda ingin menggunakan opsi "only on clean exit", tambahkan saja
exit 1
di akhir ForceCommand.Sunting: Saya salah paham; Anda hanya ingin mempertahankan port yang diteruskan, Anda tidak ingin menjaga output dari ForceCommand. Dalam hal ini, apakah http://tartarus.org/~simon/putty-snapshots/htmldoc/Chapter4.html#config-ssh-noshell melakukan apa yang Anda inginkan?
sumber