Limitazioni della connessione SSH


3

Ho una rete di 100 macchine, tutte con Ubuntu Linux.

Esiste un limite al numero di macchine che possono connettersi a una singola macchina (contemporaneamente)?

Ad esempio, posso fare in modo che 99 delle mie macchine mantengano una connessione ssh continua alla 100a macchina? Posso avere una delle mie macchine (ognuna delle 100) mantenere una connessione ssh continua con tutte le altre 99 macchine?

Quanta memoria occupa ciascuna di tali connessioni?

Risposte:


7

Il numero di connessioni totali è limitato principalmente dal numero di porte su cui possono entrare e dalla capacità del sistema. Ci sono opzioni di configurazione (Max_Sessions e Max_Startup) ma si applicano solo al numero di connessioni DA un singolo IP e al numero di connessioni di avvio richieste simultanee ... Fondamentalmente sono protezione DDOS.

Non esiste un modo semplice per dire quanta memoria verrà utilizzata da una connessione: dipende interamente dalla quantità di traffico. Una connessione estremamente utilizzata può utilizzare più risorse di 10.000 connessioni che non fanno nulla.

Detto questo, sarà quasi sempre un'idea migliore avere le connessioni stabilite quando sono necessarie e chiuse quando non lo sono.


La ringrazio per la risposta. Il mio obiettivo è essere in grado di scrivere / leggere i dati su ciascuno dei nodi, il più velocemente possibile. l'apertura e la chiusura delle connessioni ridurrebbe la mia performance. altre idee su come raggiungere questo obiettivo?
user74781

@utente: se stai scrivendo da 100 connessioni contemporaneamente, incontrerai problemi molto rapidamente ... Molto probabilmente saturerai la tua larghezza di banda prima che qualsiasi altra cosa abbia la possibilità di rompersi. Che tipo di dati deve essere in tempo reale?
Satanicpuppy

grazie. Probabilmente scriverò i dati da ONE CONNECTION all'altro 99. I dati che ottengo sono in streaming in tempo reale. Lo sto elaborando in Xmemoria nella macchina e voglio trovare il modo più veloce per inviare (in parallelo, se possibile) tutti i "pezzi di dati" a ciascuna delle altre 99 macchine (il che significa che ogni macchina otterrà il suo pezzo) . Quindi, spetta a ogni singolo computer elaborare i dati ricevuti e archiviarli nel suo disco locale. ha senso?
user74781

@utente: Quindi stai guardando le connessioni in uscita , da una macchina a 99 altre macchine, o stiamo parlando di 100 macchine tutte costantemente connesse a 99 altre macchine che si martellano a vicenda con dati in tempo reale? Probabilmente avrai molto più successo se tutte le macchine aggregheranno i dati nei gruppi locali, piuttosto che ogni macchina otterrà una copia completa dei dati.
Satanicpuppy

sì, supponiamo che stiamo parlando di connessioni in uscita. C'è una macchina che ottiene i dati. lo divide in pezzi. Qual è il modo più veloce per inviare i "pezzi" alle singole macchine?
user74781

3

Penso che tu possa. Di solito ne ho circa 3 nella mia scatola di casa, e nel mio ufficio ne possiamo avere fino a 10. Dipende solo da cosa può gestire il tuo computer.

Ci sono impostazioni in sshd_config che potresti dover modificare. Ecco un link alla pagina man . Si trova in /etc/ssh/sshd_config. L'impostazione predefinita è 10. Dovrai aumentarlo.

Ho trovato questa risorsa che parlava di come aumentare il massimo. Ecco una piccola spiegazione:

  • /proc/sys/net/core/somaxconn- connessioni TCP massime (SSH si connette su TCP)
  • /proc/sys/net/core/netdev_max_backlog- non è un grosso problema, questa è la coda di pacchetti massima

Puoi semplicemente modificare questi numeri se devi aumentarli. Il mio valore predefinito somaxconnè 128, quindi dovresti essere buono.

MODIFICARE:

Altre opzioni

Usa i websocket con NodeJS.

Questo dovrebbe farti cominciare. Se non vuoi imparare come usare i websocket, invia semplicemente le richieste HTTP Post a un server web. Non hanno un sovraccarico eccessivo e puoi inviare molti dati in questo modo. Personalmente opterei per i websocket perché sono in tempo reale e non sono troppo difficili da configurare.


Sì, ho anche un valore predefinito somaxconndi 128. Il mio obiettivo qui è quello di essere in grado di scrivere / leggere i dati su ciascuno dei nodi, il più velocemente possibile. Hai suggerimenti "migliori" (più rapidi) su come raggiungere questo obiettivo, piuttosto che collegarti ssh?
user74781

Basta leggere e scrivere i dati? Usa rsync per i file, tiene traccia delle modifiche e riduce l'overhead totale della rete. Presumo che nodestu intenda singoli computer. Che cosa vuoi fare esattamente?
beatgammit

È inoltre possibile impostare un server HTTP (ad esempio NodeJS) e creare un server semplice che gestisca i websocket se si desidera solo inviare dati. Non ci sarebbe praticamente nessun overhead di rete e rimane aperto. Lo svantaggio è che devi fare un po 'di programmazione.
beatgammit

@tjameson: rsyncè buono per inviare / ricevere file. Il mio obiettivo qui è di essere in grado di scrivere i dati su singole macchine (connesse in una rete) nel modo più veloce possibile. I miei dati di origine vengono trasmessi in streaming nella memoria di machine X. L'ho elaborato in memoria e quindi è necessario memorizzarlo. Sono molti i dati, quindi, idealmente, vorrei dividere i dati in memoria (usando un po 'di logica) e inviarli (cioè parti di essi) a ogni singolo computer, nel modo più veloce. quel singolo computer gestirà la scrittura dei dati nel suo disco locale.
user74781

Quindi userei i websocket. Imposta i websocket utilizzando NodeJS o qualcosa di simile e invia i dati a ciascuno di essi utilizzando la logica di cui hai bisogno. Pubblicherò un paio di link alla mia risposta.
beatgammit
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.