2009-12-11 8 views
5

Ho il seguente script:ssh esecuzione di comandi a distanza e ulimit

cat > /tmp/script.sh <<EndOfScript 
#!/bin/sh 
ulimit -n 8192 
run_app 
EndOfScript 

che gira senza problemi a livello locale, è sempre ok. Ma se provo a farlo funzionare in modalità remota tramite ssh:

scp /tmp/script.sh [email protected]:/tmp/script.sh 
ssh [email protected] "chmod 755 /tmp/script.sh; /tmp/script.sh" 

ho ottenuto l'errore:

ulimit: open files: cannot modify limit: Operation not permitted 

Ho anche provato il seguente comando:

ssh [email protected] "ulimit -n 8192" 

stesso errore.

Sembra che l'esecuzione del comando remoto ssh stia applicando un limite rigido di 1024 sul limite nofile, ma non riesco a trovare la modalità di modifica di questo valore predefinito. Ho provato a modificare /etc/security/limits.conf e riavviare sshd, ancora lo stesso errore.

+1

finalmente ho trovato la risposta corretta: aggiungere quanto segue a/etc/initscript: ulimit -c unlimited ulimit -HSn 65535 # eseguire il programma. eval exec "$ 4" –

risposta

3

Fiannly capito la risposta: aggiungere quanto segue a/etc/initscript

ulimit -c unlimited 
ulimit -HSn 65535 
# Execute the program. 
eval exec "$4" 
+0

Grazie per questo. Stranamente non trovo le opzioni -H e -S nella pagina man di ulimit. – smartnut007

2

ulimit richiede i privilegi di superutente per l'esecuzione.

Si consiglia di chiedere all'amministratore del server di modificare tale valore per il server sul quale si sta tentando di eseguire lo script.

Lui/Lei può farlo modificando /etc/secutiry/limits.conf su Linux. Ecco un esempio che potrebbe aiutare:

*    soft nofile   8192 
*    hard nofile   8192 

Dopodiché, non è necessario riavviare sshd. Basta disconnettersi e accedere di nuovo.

Ti suggerisco di fare la stessa domanda in ServerFault. Qui troverai risposte migliori sul lato server.

+1

Ho modificato /etc/security/limits.conf, riavviato sshd, anche riavviato la macchina. Non è ancora possibile ottenere un limite di nofile superiore a 1024. –

+0

Puoi pubblicare la riga corrispondente nel tuo limits.conf? Potrebbe contenere un errore.Tieni presente che al processo sshd deve essere applicato l'ulimit, quindi controlla se non ci sono impostazioni di ulimit nei suoi script di avvio ecc. – wds

+0

Ho aggiunto quello che vuoi alla risposta. –

0

Controllare gli script di avvio (/etc/profile, ~/.??*) per una chiamata a ulimit. IIRC, una volta che è stato imposto un limite, non può più essere ampliato.

+0

Un riavvio ripristina il limite? – mcandre

+0

Solo quando il comando 'ulimit' non viene eseguito durante l'avvio. Se crei una nuova finestra di shell, il 'ulimit' è attivo solo per questa shell e tutti i bambini. In questo caso, l'avvio di una nuova finestra della shell crea già una sessione senza limiti. Il 'ulimit' è in uno script di avvio, tutte le shell sono interessate prima di poter fare qualsiasi cosa, quindi un riavvio non aiuterà. Devi disabilitare il comando, prima. –

11

Invece di utilizzare la soluzione di /etc/initscript (e non fare un errore di battitura in quel file .. :), se solo vuoi sshd per rispettare le impostazioni effettuate in /etc/security/limits.conf, dovresti assicurarti di avere UsePAM yes in /etc/ssh/sshd_config e /etc/pam.d/sshd liste session required pam_limits.so (o altrimenti include un altro file che lo fa).

Questo dovrebbe essere tutto quello che c'è da fare.

Nelle versioni precedenti od openssh (< 3.6 qualcosa) c'era anche un problema con UsePrivilegeSeparation che impediva il rispetto dei limiti, ma era stato risolto nelle versioni più recenti.

+1

ha controllato entrambi i file per quelle linee e erano presenti. In esecuzione su OpenSSH_5.8p1 Debian-7ubuntu1, OpenSSL 1.0.0e 6 set 2011. Ancora lo stesso problema di OP: | – kellogs

+0

Ho cercato questa informazione per anni - grazie! –

+0

Sono stato alla ricerca e tentando diverse correzioni per giorni e ora "UsePAM yes" in/etc/ssh/sshd_config è esattamente quello che mi mancava. Grazie mille! –