将每个用户的 /etc/ssh/ssh_config 中的“user-ops”更改为“user-adm”

将每个用户的 /etc/ssh/ssh_config 中的“user-ops”更改为“user-adm”

问题:我们有一台服务器 A,其中包含本地用户列表,全部名为something-ops。然而,当他们从 A ssh 到其他所有服务器时,我们希望他们使用something-admin.例如更改joe-opsjoe-admin.

试图:我知道我们可以在每个/home/$USER/.ssh/config

Host *
    username: joe-admin

然而,为每个用户设置和维护它会有点麻烦。特别是因为$USER等于something-ops而不只是something

可以使用脚本或变量替换为每个用户完成从user-ops到的更改吗?user-adm/etc/ssh/ssh_config

答案1

您可以尝试使用包装脚本:

#! /bin/sh
username=${USER%-ops}-admin
exec /usr/bin/ssh -l "$username" "$@"

将其放入, 或在in之前的某个合适位置/usr/local/bin/ssh命名的文件中(当然,如果位于除 之外的其他位置,则相应地调整所有内容)。ssh/usr/bin$PATHssh/usr/bin

如果存在的话,您也scp可以有类似的包装脚本。sftp需要覆盖脚本的用户可以调用实际二进制文件的位置。

答案2

可以说,当您的用户不记得正确登录(和/或无法 ~/.ssh/config为自己设置个人)时,恕我直言,他们首先不应该被授予管理员权限。


如果您想宠爱您的用户,您最好的选择仍然是设置~/.ssh/config 包含正确信息的个性化内容

Host *
    username: login-admin

您无法使用~/.ssh/configin模板/etc/skel/为每个(新)用户进行设置,因为该主目录模板中的文件会逐字复制,并且该机制不提供任何自定义支持。

为了解决这个问题,我要确保,对于每个没有条目的用户~/.ssh/configHost *当他们登录(第一次)时,会生成这样的文件和/或填充正确的条目。

一种方法是在/etc/profile.d.

具有扩展名的脚本.sh通常会在每次用户登录具有 bash 登录 shell 时执行。类似地,带有扩展名的脚本.csh 通常会为分配了 csh 的用户执行。

# /etc/profile.d/ssh-config.sh 

if ! grep -qi "host *" ~/.ssh/config 2&>1
then
   if [ ! -d ~/.ssh/ ]
   then
     # Set up .ssh dirctory with correct permissions
     mkdir ~/.ssh/  && chmod 0700 ~/.ssh/
   fi
   echo "Host *
     username: ${USER%-ops}-admin" >> ~/.ssh/config  && chmod 0600 ~/.ssh/config
fi

相关内容