首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >动态.bash_profile登录壳

动态.bash_profile登录壳
EN

Unix & Linux用户
提问于 2018-01-10 01:17:18
回答 1查看 242关注 0票数 3

我试图找到一种方法来动态设置bash环境设置,具体取决于我要登录的环境。

例如:

  • 从xfce GUI打开终端会话,它将用我的基本环境设置加载一个“默认”(缺少更好的单词) .bash_profile
  • 通过SSH从另一台FreeBSD (或Linux)计算机进行连接也将使用“默认”.bash_profile
  • 通过SSH从我的Mac连接将添加额外的设置(例如,iTerm2外壳集成)

我曾考虑过测试环境变量SSH_CLIENT,但这将根据DHCP地址的不同而改变--我的机器是从那天开始测试的。

是否有方法确定远程机器的平台是什么,然后相应地处理.bash_profile

如果我不能在.bash_profile中“自我包含”,是否有什么我可以“发送”的东西可以让我做到这一点?

EN

回答 1

Unix & Linux用户

发布于 2018-01-10 18:01:21

是否有方法确定远程机器的平台是什么,然后相应地处理.bash_profile?

不简单,不。如果网络条件允许,您可以使用nmap来识别$SSH_CLIENT中原始IP的操作系统,但这并不一定可靠。

如果您的源系统位于不同的网段上,您可以使用它作为区分源系统的粗略指示符,但这里的情况并非如此。

由于您只想让Mac的连接做一些不同的事情,一种选择是将Mac的ssh连接包装或别名到目标,这样它就会传递一个自定义环境变量,以便bash检查:

代码语言:javascript
复制
alias ssh2it='ssh -t targethost "_origin=mac bash -il"'

然后按照以下思路设置目标程序的~/..bashrc:

代码语言:javascript
复制
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以添加:

代码语言:javascript
复制
AcceptEnv _origin

(然后回收sshd)。

然后在原始系统上,编辑~/..ssh/config以发送该变量:

代码语言:javascript
复制
Host targetsystem
  SendEnv _origin

在连接到目标之前,请运行:

代码语言:javascript
复制
export _origin=mac

然后,在登录到目标系统后,$_origin将被设置为该值。

票数 1
EN
页面原文内容由Unix & Linux提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://unix.stackexchange.com/questions/415960

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档