2017-12-22 2 views
0

Ich versuche, ein kleines Setup-Skript erstellen, die Benutzer ihre eigene IP-Adresse eingeben müssen ... Ich versuche, die Standard-IP-Adresse sein der verbundenen SSH-Sitzung.So erhalten Sie Remote-Client-SSH-IP von Sudo'd Skript

Wenn ich ${SSH_CLIENT%% *} in der Befehlszeile ausführen, zeigt es 99.99.99.99: command not found und wenn ich echo ${SSH_CLIENT%% *} tun zeigt es nur 99.99.99.99 (wo 99.99.99.99 ist meine eigentliche WAN IP) ...

jedoch der folgende Code (im lief eine bash-Skript) zeigt
[6/9] Enter your public IP address. (eg.) :

declare CONNECTED_IP=${SSH_CLIENT%% *} 
read -e -p "[6/9] Enter your public IP address. (eg. $CONNECTED_IP) : " ipAddress 
[ -z "$ipAddress" ] && ipAddress=$CONNECTED_IP 

Update 1
Bei der weiteren Überprüfung es funktioniert ... außer wenn ich das Skript mit sudo ausführe. Kann mir jemand dieses Verhalten erklären und gibt es einen Workaround?

Update 2
Also, es sein worden ist erklärt, dass dieses Verhalten auf die Tatsache zurückzuführen ist, dass Umgebungsvariablen wird nicht beibehalten, wenn Benutzerwechsel (sudo) und dass ich die -E Flags verwenden könnte, wenn das Skript ausführen zu Die Umwelt bewahren.

Leider ist dies ein Skript, das geteilt wird, und ich kann daher nicht sicherstellen, dass der Benutzer das Skript mit dem -E Flag ausführt. Außerdem weiß ich nicht einmal, ob sie überhaupt sudo verwenden werden.

Das Gesagte, ich bin auf der Suche nach einer einheitlichen Möglichkeit, die IP-Adresse des Benutzers über SSH verbunden zu erhalten.

+0

Ich kann das Problem nicht reproduzieren. – iBug

+0

Fügen Sie es zu einer Skriptdatei hinzu und führen Sie es dann aus ... wenn ich kopiere, was ich oben in das Terminal geschrieben habe, funktioniert es gut. Wenn es sich jedoch in 'script.sh' befindet und ich es ausführe, wird keine IP-Adresse angezeigt. – user1960364

+0

@ user1960364 Da diese Frage nicht mehr von 'read' oder Variablen handelt, sollten Sie sie vielleicht von Grund auf neu schreiben (zB" Wie bekomme ich Client IP von einem Skript mit sudo über ssh ") –

Antwort

1

Der Grund, warum die Variable bei Verwendung von sudo nicht angezeigt wird, besteht darin, dass die Umgebung beim Wechsel von einem anderen Benutzer nicht automatisch beibehalten wird. Sie können die sudo-Option -E verwenden, um die aktuelle Umgebung beizubehalten.

$ sudo -E ./script.sh 

sollte die IP zeigen, wie erwartet.

-E, --preserve-env Zeigt die Sicherheitsrichtlinie, die der Benutzer ihre vorhandenen Umgebungsvariablen erhalten will. Die Sicherheitsrichtlinie kann einen Fehler zurückgeben, wenn der Benutzer nicht berechtigt ist, die Umgebung zu erhalten.

+0

Leider glaube ich nicht, dass das funktionieren würde, weil es ein Installationsskript ist, das andere benutzen werden und ich kann nicht sicher sein, dass sie die Flagge benutzen werden ...Gibt es einen Weg innerhalb des Skripts selbst, um die vorherige Umgebung abzurufen? – user1960364

+0

Laufen die anderen das Installationsskript als 'sudo'? –

+0

Sie dürfen, sie dürfen nicht ... es ist ein Skript, das ich auf GitHub haben möchte, also wer weiß, wie sie es ausführen werden. Ich versuche nur, ein konstantes Verhalten zu gewährleisten ... – user1960364

Verwandte Themen