it-swarm.com.de

Ungeeignetes Ioctl für Gerät beim Versuch, SSH auszuführen

Ich versuche ein paar SSH-Server und versuche, Sudo -l-Ausgabe von jedem Server zu erhalten.

Unten ist das Skript, das ich ausführte

#!/bin/bash
serverlist="/tmp/servers"

while IFS=, read -r server netgroup username user
do
        ssh -tt -q [email protected]$server Sudo -U $username -l < /dev/null
done < "$serverlist"

Ich habe die -tt-Option in diesem Skript als Ursache für diesen Fehler gefunden. Irgendwelche Gedanken dazu?

Ich habe auch bemerkt, dass ich diesen Fehler nicht sehe, wenn ich den Befehl nur für 1 Server ausführte.

ssh -tt -q [email protected] Sudo -U cham01 -l

Unten ist die vollständige Fehlermeldung, die ich bekomme: tcgetattr: Inappropriate ioctl for device

4

tcgetattr: Inappropriate ioctl for devicenormalerweise bedeutet, dass ein Programm versucht hat, eine Terminalsteuerungsoperation auszuführen, aber seine Standard-E/A-Streams waren nicht mit einem Terminal verbunden. (Ich weiß das, weil tcgetattr der Name einer C-Bibliotheksfunktion ist, die Terminalsteuerungsoperationen ausführt.)

Nun geht es bei der -tt-Option für ssh darum, dass das Programm auf dem entfernten Host is ausgeführt wird, der mit einem Terminal verbunden ist, und stty das Ausdrucken von speed 38400 baud; line = 0; -brkint -imaxbel zeigt, dass es war. Das erhalte ich, wenn ich diese Befehle mit my Servern ausführe:

$ ssh myserver stty < /dev/null
stty: 'standard input': Inappropriate ioctl for device

$ ssh -tt myserver stty < /dev/null
speed 38400 baud; line = 0;
-brkint -imaxbel
Connection to myserver closed.

Aber was Sie bekommen, ist

$ ssh -tt yourserver stty < /dev/null
tcsetattr: Inappropriate ioctl for device
speed 38400 baud; line = 0;
-brkint -imaxbel

Der tcsetattr-Fehler ist nicht, der von stty stammt. Zuerst versuchte etwas, was mit dem Terminal zu tun hatte, und dannstty lief erfolgreich. Dies schlägt einen Fehler in den Shell-Startskripten vor, die etwas unangemessenes ausführen, wenn sie "nicht interaktiv" ausgeführt werden. Dadurch wird dieser Fehler auch wenn Sie sind angezeigt. laufende Befehle, die an ein Terminal angeschlossen sind. Ich kann Ihnen nicht weiter helfen, aber vielleicht diese alte Antwort auf ein ähnliches Problem bietet einige Hinweise.

6
zwol

In dieser Antwort werde ich keine Lösung vorschlagen (ich weiß nicht, woher der Fehler kommt), sondern stattdessen eine Mächtige vorschlagen Instrument, um es zu finden!

Um zu verstehen, woher das Problem kommt, können Sie den Befehl strace verwenden:

strace ssh -tt -q [email protected] Sudo -U cham01 -l < /dev/null 

Sicher werden Sie erkennen, welcher Systemaufruf den Fehler verursacht. Die Shell fordert alle Systemaufrufe auf und gegen Ende sehen Sie etwa Folgendes:

....
ioctl(3, SNDCTL_TMR_START or TCSETS, {B0 -opost -isig -icanon -echo ...}) = -1 ENOTTY (Inappropriate ioctl for device)
....

hier , Beispiele finden Sie auf wie man es benutzt.

Vorschlag: Vor dem ioctl(...)-Systemaufruf sollte ein open(...)-Systemaufruf für dasselbe Gerät vorhanden sein. Gehen Sie in die Header-Datei des Geräts und versuchen Sie, einen Blick auf die verschiedenen Befehle zu werfen, die Sie übergeben können. Das Problem sollte ein nicht erkannter Befehl sein (aufgrund möglicherweise einer alten Version des verwendeten Gerätetreibers). Dies ist nur ein Vorschlag.

1
Leos313
0
Felipe