问题:我们有一台服务器 A,其中包含本地用户列表,全部名为something-ops
。然而,当他们从 A ssh 到其他所有服务器时,我们希望他们使用something-admin
.例如更改joe-ops
为joe-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
$PATH
ssh
/usr/bin
如果存在的话,您也scp
可以有类似的包装脚本。sftp
需要覆盖脚本的用户可以调用实际二进制文件的位置。
答案2
可以说,当您的用户不记得正确登录(和/或无法 ~/.ssh/config
为自己设置个人)时,恕我直言,他们首先不应该被授予管理员权限。
如果您想宠爱您的用户,您最好的选择仍然是设置~/.ssh/config
包含正确信息的个性化内容
Host *
username: login-admin
您无法使用~/.ssh/config
in模板/etc/skel/
为每个(新)用户进行设置,因为该主目录模板中的文件会逐字复制,并且该机制不提供任何自定义支持。
为了解决这个问题,我要确保,对于每个没有条目的用户~/.ssh/config
,Host *
当他们登录(第一次)时,会生成这样的文件和/或填充正确的条目。
一种方法是在/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