如何从Sudo'd脚本获取远程客户端SSH IP

时间:2017-12-22 16:08:36

标签: bash

我正在尝试创建一个小的安装脚本,要求用户输入自己的IP地址......我正在尝试将默认IP地址设置为连接的SSH会话。

当我在命令行中运行${SSH_CLIENT%% *}时,它会显示99.99.99.99: command not found,当我echo ${SSH_CLIENT%% *}时,它会显示99.99.99.99(其中99.99.99.99是我的实际值WAN IP)...

但是,以下代码(在bash脚本中运行时)显示
[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

更新1
经过进一步审核,它确实有效......除了我用sudo运行脚本的时候。有人可以向我解释这种行为并且有解决办法吗?

更新2
因此,有人解释说这种行为是由于切换用户(sudo)时未保留环境变量这一事实,并且在执行脚本时我可以使用-E标志来保留环境。

不幸的是,这是一个将被共享的脚本,因此无法确保用户使用-E标志执行脚本。此外,我甚至不知道他们是否会使用sudo

那就是说,我正在寻找一种一致的方法来获取通过SSH连接的用户的IP地址。

1 个答案:

答案 0 :(得分:1)

变量在使用sudo时未显示的原因是,当您从其他用户切换时,它不会自动保留环境。您可以使用-E sudo选项来保留当前环境。

$ sudo -E ./script.sh

应按预期显示IP。

  

-E, - pre-env                指示用户希望保留的安全策略                他们现有的环境变量。安全政策可以                如果用户没有保留权限,则返回错误                环境。