动态 .bash_profile 登录 shell

动态 .bash_profile 登录 shell

我正在尝试找到一种根据我登录的环境动态设置 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 将被设置为该值。

相关内容