![动态 .bash_profile 登录 shell](https://linux22.com/image/125207/%E5%8A%A8%E6%80%81%20.bash_profile%20%E7%99%BB%E5%BD%95%20shell.png)
我正在尝试找到一种根据我登录的环境动态设置 bash 环境设置的方法从。
例如:
.bash_profile
从 xfce GUI 打开终端会话,它将使用我的基本环境设置加载“默认”(缺少更好的词)从另一台 FreeBSD(或 Linux)机器通过 SSH 连接也将使用该“默认”
.bash_profile
从我的 Mac 通过 SSH 连接会添加额外的设置(例如 iTerm2 shell 集成)
我想过测试环境变量SSH_CLIENT
,但这会根据我那天通过 ssh 获取的机器的 DHCP 地址而改变。
有没有办法确定远程机器的平台是什么,然后进行.bash_profile
相应的处理?
如果我不能“自我包含”它.bash_profile
,我可以“发送”一些东西来让我做到这一点吗?
答案1
有没有办法确定远程计算机的平台是什么,然后相应地处理 .bash_profile ?
不简单,不。如果网络条件允许,您可以使用地图尝试识别 $SSH_CLIENT 中原始 IP 的操作系统,但这不一定可靠。
如果您的源系统位于不同的网段,您可以使用它作为区分源系统的粗略指标,但您的情况并非如此。
由于您只是希望 Mac 的连接执行不同的操作,因此一种选择是将 Mac 的 ssh 连接包装或别名到目标,以便它传递自定义环境变量供 bash 检查:
alias ssh2it='ssh -t targethost "_origin=mac bash -il"'
然后按照以下方式设置目标主机的 ~/.bashrc:
case $_origin in
(mac)
echo mac-specific settings here
;;
(other-custom-system)
echo other settings here
;;
(*)
echo any default settings here
;;
esac
您必须将这个想法扩展到您想要表现不同的每种其他类型的系统,这意味着包装每个交互式登录以便设置变量。
如果您可以进一步控制目标系统的 sshd_config,那么您可以编辑 /etc/ssh/sshd_config 添加:
AcceptEnv _origin
(然后回收 sshd)。
然后在原始系统上,编辑 ~/.ssh/config 以发送该变量:
Host targetsystem
SendEnv _origin
在连接到目标之前,运行:
export _origin=mac
然后,登录到目标系统后,$_origin 将被设置为该值。