由于我们无法控制的原因,我的团队在一些系统上通过非用户 shell 共享用户帐户。我们都将受密码短语保护的私钥移动到共享用户的 ~/.ssh 目录中。我们通常登录并打开一个ssh-agent
会话,然后ssh-add
使用我们的密码保护密钥,如下所示。我们都不喜欢这个工作流程,我们正在努力让它变得更容易。
有没有一种方法可以在我们打开共享用户的 shell 时自动提示我们输入密码?
sudo -u shared /bin/bash
# new shell opens
eval `ssh-agent -s`
ssh-add ~/.ssh/my_username_rsa
# enter passphrase and continue...
答案1
那么要添加的密钥应该取决于启动 sudo 会话的用户?环境SUDO_USER
变量可能是您需要的?
将类似以下内容放入shared
用户的 shell 启动文件中(例如.bash_login
Bash。尽管您需要使用 来将 shell 作为登录 shell 启动sudo -i
):
eval $(ssh-agent -s)
ssh-add ~/.ssh/${SUDO_USER}_rsa
甚至
if [ "$SUDO_USER" = userthis ] ; then
echo do something for this user
elif...
fi
当然,这种共享帐户的缺点是,所有人实际上都拥有彼此的密钥,因为密钥保存在单个用户 ID 下,并且没有任何东西可以分隔共享帐户的不同用户。
我不确定是否可以在您的普通帐户下启动ssh-agent
before sudo
,然后从 sudoed shell 中使用它。我想它至少需要修复代理套接字的权限,即使这样,同一帐户的其他用户也可以使用代理中的密钥,尽管可能不会复制它们。
答案2
我会像你一样:
eval $(ssh-agent -s)
ssh -A shared@localhost
这样您就不必将私钥文件放在共享用户的目录中。