我的问题与此类似,但我正在寻找稍微不同的问题。我有一台笔记本电脑,用于在两种不同的情况下访问网络上的 Linux 机器:
我有一个直接的有线连接到网络。
我与网络有间接连接。网络上有一台暴露在 Internet 上的网关机器,我可以用它来建立到网络上主机的 SSH 隧道。这显然是一个更慢、更高延迟的连接。
我的主目录可从所有机器通过网络访问,因此它们共享我的.bashrc
. 我想添加功能来.bashrc
检测我所处的两个场景中的哪一个并采取相应的行动(从技术上讲,会有三个场景,其中第三个是我登录到我的本地机器,但这应该很容易处理)。我想做这样的事情:
alias ssh ssh -X
当我在本地网络上,但我不想在 Internet 上使用 X 转发时。
export EDITOR=gvim
当我在本地网络上时,export EDITOR=vim
但当我在远程时。
等等。根据之前的答案,看起来我应该能够通过检查SSH_CLIENT
(如果存在)的内容并查看客户端 IP 地址是否与本地计算机上的网络适配器之一匹配来完成类似的操作。我想我会看看是否有更灵活或更强大的方法来实现这一点。
Gil*_*il' 10
要检测 SSH 会话,请使用$SSH_CLIENT
.
为了区分本地和远程会话,有两种可能的方法:客户端或服务器端。在服务器端,$SSH_CLIENT
与本地IP地址或路由表进行比较;这通常会告诉您连接是否来自 LAN。在客户端,您可能希望将ForwardX11
设置放入您的~/.ssh/config
: 将其设置yes
为 LAN 主机和no
WAN 主机。这意味着~/.ssh/config
在不同的站点上有不同的;这就是我所做的,我用一个 shell 脚本生成我的。
如果 X11 转发对于 LAN 连接是打开的,对于 WAN 连接是关闭的,那么您可以设置您喜欢的编辑器以将$DISPLAY
其考虑在内。
服务器端设置通常会进入您的.profile
(或者.bash_profile
如果您的登录 shell 是 bash 并且您使用.bash_profile
,或者.zprofile
如果您的登录 shell 是 zsh)。
case ${SSH_CLIENT%% *}//$(/sbin/ifconfig |
sed -n 's/^.* addr:\([0-9][0-9.]*\) .*/\1/p' |
tr '\n' /)/ in
"") :;;# local session
10.42.*/10.42.*) :;; # LAN session
1.2.3.*/1.2.3.*) :;; # LAN session
*) unset DISPLAY;; # WAN session
esac
export EDITOR=vim
if [ -n "$DISPLAY" ] && type gvim >/dev/null 2>/dev/null; then
EDITOR=gvim
fi
export VISUAL="$EDITOR"
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
2168 次 |
最近记录: |