在我工作的公司,我们有一些共享帐户,任何人都可以通过 SSH 使用这些帐户执行特定任务。目前,我们有太多用户,每个用户都有自己的可用性优势,例如 shell 别名等。
我想要做的是允许用户根据~/.bash_profile
实际登录的用户通过不同的 shell 设置。例如,当 Jonathan 登录时,我希望 shell 额外执行~/.Jonathan_profile
,而对于 Bob,我希望 shell 源配置~/.Bob
文件。
但是,我不确定是否有办法知道使用 SSH 登录的用户在远程机器上的帐户名。
如能提供任何提示我将不胜感激。
答案1
你无法知道客户正在使用什么账户,因为客户不会告诉你。但有这些事情你可以能做:
创建单独的帐户,并让用户使用 sudo 访问共享帐户。这确实是首选选项,可为您提供最佳审计(始终记录谁做了什么),并且用户可以将他们想要的任何实用程序放入他们的帐户中。然而,这也是最繁重的工作。
仅使用公钥认证并使用以下语法从那里设置环境变量:
environment="END_USER=whoever" ssh-rsa asdfasdfr...
在 中
.ssh/authorized_keys
。然后你$END_USER
在 中查看.profile
。显然,你必须为用于登录的每个公钥设置它。告诉每个人使用选项从客户端设置环境变量
SendEnv
(服务器必须有相应的AcceptEnv
设置)。再次检查中的变量.profile
。从变量中获取源 IP 和端口
SSH_CONNECTION
并用于ident
获取实际的源用户;但identd
必须在客户端上运行,而现在很少这样做,因为它不是很有用,但对于潜在的攻击者获取有关您的系统的一些信息很有用。对于单个帐户内更复杂的自定义,始终可以编写自定义 shell 包装器并将其与
command
授权密钥中的属性一起使用。这也是一项相当繁重的工作,但它可用于实施几乎任何限制和审计,而无需创建单独的帐户。
注意:我当然建议只使用公钥并禁用密码。这样,如果您想取消某人的访问权限,只需删除他们的密钥即可。