Tujuan saya adalah untuk memungkinkan 10000 ssh berjalan bersamaan pada satu server.
Untuk kesederhanaan, saya ssh-ing ke localhost:
for i in `seq 1 10000`; do
ssh localhost "echo ${i}; sleep 100" >>./info 2>>./log &
done
sleep 100
adalah untuk memastikan ketika ssh ke-10.000 dimulai, ssh ke-1 masih terhubung sehingga memang ada 10.000 ssh bersamaan .
Dan inilah dua jenis pesan kesalahan yang saya dapat:
1. ssh_exchange_identification: Connection closed by remote host
2. ssh_exchange_identification: read: Connection reset by peer
Saya telah melakukan modifikasi berikut:
- Di
/etc/security/limits.conf
dan/etc/security/limits.d/90-nproc.conf
, atur lunak & kerasnofile
&nproc
ke 65535 (ini adalah nilai maksimum yang mungkin? - Pembaruan: tidak. Nilai maks adalah 1048576 ) - Di
/etc/sysctl.conf
, aturkernel.pty.max = 65535
- Di
/etc/ssh/sshd_config
, aturMaxStartups 10000
.
Modifikasi ini memungkinkan saya untuk berhasil menjalankan 1000 ssh s bersamaan ke satu server, tetapi mereka tidak berfungsi untuk 2000 dan di atas ssh s.
Beberapa orang menyarankan untuk mengubah nilainya MaxSessions
(sebenarnya saya tidak jelas tentang penggunaannya: bagaimana multiplexing mempengaruhi kasus saya?), /proc/sys/net/core/netdev_max_backlog
Dan /proc/sys/net/core/somaxconn
, tetapi mereka tampaknya tidak membuat perbedaan.
Selain itu, tidak ada kesalahan jika mereka 10.000 ssh bersamaan ke server yang berbeda (masalah hanya terjadi ketika ssh ke satu server):
for i in `seq 1 10000`; do
j=$(( 1 + $i % 8 ))
ssh server-${j} "echo hi; sleep 100" >info-${j} 2>log-${j} &
done
Saya sudah terjebak dalam hal ini cukup lama.
Bantuan apa pun akan sangat dihargai!
sleep 100s
apa yang Anda pikirkan. Itu dijalankan bukan di sesi ssh, tetapi di mesin Anda sendiri.error: reexec socketpair: Too many open files
, jadi saya kira nilai sebelumnyanofile
(yaitu 65.535) masih jauh dari cukup. Saya tidak terbiasa dengan ControlMaster tetapi saya akan mencobanya, terima kasih !! :)ps axu | egrep "ssh|sleep" | grep -v grep
hanya daftarsleep 100s
, bukanssh
. Saya pikir Anda harus mengubah perintah kessh "echo hi; sleep 100s"
.sleep 100
harus dalam perintah yang dikirim melalui ssh, yang merupakan kasus dalam skrip aktual saya, tapi saya membuat kesalahan ketik di sini. Saya telah memperbarui pos utama yang sesuai. Terima kasih banyak untuk menunjukkannya !!Jawaban:
Aku berharap dia bisa berkomentar
sshd perlu (biasanya, tetapi meskipun Anda tidak menentukan kasus penggunaan yang tepat, dll.) mengalokasikan pty per login, namun, dalam kasus Anda, ssh "echo hi; sleep 100s" TIDAK mengalokasikan pty, jadi tidak perlu untuk pengaturan kernel.pty.max ... kecuali jika Anda ingin ribuan pengguna login * ... untuk mengujinya, Anda harus menambahkan opsi -t ke pengujian Anda, yaitu. ssh -t "echo hai; tidur 100-an"
Kembali ke masalah yang dihadapi dengan
error: reexec socketpair: Too many open files
Tes pada Wheezy dist-upgrade ke sistem Jessie, saya menemukan bahwa / etc / security / limit * tidak mengubah batas sshd.periksa dengan
cat /proc/<pid-of-sshd>/limits
yang dalam kasus saya, setelah pengaturan di /etc/security/limits.conf: * nofile soft 65535 * nofile hard 65535 masih melaporkan hanya 1024 (soft) dan 4096 (hard) untuk batas sshd. Resolusi tampaknya untuk memaksaulimit -Hn 65535
&ulimit -n 65535
di dalam/etc/init.d/ssh
skrip menggunakan perintah ulimit itu, saya telah menaikkan nshiles sshd ke 65535/65535 dari 1024/4096sumber