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

问题描述 投票:0回答:1

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

当我在命令行中运行${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地址。

bash
1个回答
1
投票

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

$ sudo -E ./script.sh

应该按预期显示ip。

-E, - preserve-env向安全策略指示用户希望保留其现有环境变量。如果用户没有保留环境的权限,安全策略可能会返回错误。

© www.soinside.com 2019 - 2024. All rights reserved.