2017-12-22 14 views
0

ユーザーが自分のIPアドレスを入力する必要がある小さなセットアップスクリプトを作成しようとしています...私はデフォルトのIPアドレスを接続されたSSHセッションのSudo'dスクリプトからリモートクライアントSSH IPを取得する方法

私は、コマンドラインで${SSH_CLIENT%% *}を実行すると、それは99.99.99.99: command not foundを示し、私はecho ${SSH_CLIENT%% *}を行うときで実行したとき、それは(次のコード、しかし...(99.99.99.99は私の実際のWAN IPです)

をちょうど99.99.99.99を示しbashスクリプト)をさらに精査することにより、更新1

[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 

を示し、それは動作しません...私はsudoでスクリプトを実行する場合を除いて。誰かがこの行動を私に説明し、回避策がありますか?アップデートは2
だから、この動作は、ユーザー(sudo)を切り替える際に、環境変数が保存されていないことに起因していることであることを説明しにスクリプトを実行するときに、私は-Eフラグを使用することができるとされています

環境を保護する。

残念ながら、これは共有されるスクリプトなので、ユーザーが-Eフラグを使用してスクリプトを実行することは保証できません。さらに、私は彼らがsudoをまったく使用するかどうかも分かりません。

つまり、私はSSH経由で接続されたユーザのIPアドレスを取得する一貫した方法を探しています。

+0

問題を再現できません。 – iBug

+0

これをスクリプトファイルに追加して実行します。上記の内容をターミナルにコピーすると正常に動作します。しかし、 'script.sh'にあり、実行している場合、IPアドレスは表示されません。 – user1960364

+0

@ user1960364この質問はもはや 'read'や変数に関するものではないので、最初から書き直すべきです(例えば、" ssh経由で実行されるスクリプトからクライアントIPを得る方法 " –

答えて

1

sudoを使用しているときに変数が表示されない理由は、別のユーザーから切り替えたときに環境を自動的に保持しないためです。 -E sudoオプションを使用すると、現在の環境を保持できます。

$ sudo -E ./script.sh 

予想通りにIPを表示する必要があります。

-Eは、--preserve-ENV は、ユーザーが 既存の環境変数を維持することを希望するセキュリティポリシーに示します。環境に を保存する権限がユーザーにない場合、セキュリティポリシーが にエラーを返すことがあります。

+0

残念ながら、他の人が使用するインストールスクリプトであり、フラグを使用するかどうかはわかりません。スクリプト自体の中から、以前の環境を取得する方法はありますか? – user1960364

+0

他のものはインストールスクリプトを 'sudo'として実行していますか? –

+0

彼らは、GitHubに持っている予定のスクリプトなので、どうやってそれを動かすのか分かりません。私はただの動作を保証しようとしています... – user1960364

関連する問題