我正在尝试运行ssh
命令到另一个 IP 命名空间。我现在可以这样做,但它以 root 身份运行。我想以普通用户身份运行它。我想知道是否有办法在另一个网络命名空间中进入非 root shell。
我知道您可以使用它来进入另一个命名空间中的 root shell:
sudo ip netns exec <namespace> bash
或者,有没有办法以非 root 用户身份运行单个命令?我知道你可以用以下命令以 root 身份运行命令:
sudo ip netns exec <namespace> <command>
答案1
您正在搜索的命令是
su --command=' your command ' new_user_name
答案2
最好的解决方案是安装一个可以设置 root 权限的程序,这样它就可以执行与“ip netns exec”相同的操作来进入命名空间,但随后放弃 root 权限以执行实际的执行。不幸的是,我找不到这样的东西。
下一个最佳解决方案是脚本:
#! /bin/bash
if [[ "$USER" != "root" || "$SUDO_USER" == "" ]]; then
echo Call this script from sudo
exit 1
fi
NS="$1"
shift
ip netns exec "$NS" sudo -u "$SUDO_USER" $*
将其放在只有 root 才能写入的文件中,并放在路径中的某个位置,例如 /usr/local/bin/nsexec
然后,要在命名空间中以自己的用户身份启动 ssh,您可以执行以下操作:
sudo nsexec testnamespace ssh
将脚本名称放入 sudoers 文件中应该是安全的,这样您就不会被要求输入密码。由于命名空间是第一个参数,您甚至可以确保只有某些命名空间可以使用。
答案3
而不是 ssh hostname
使用ssh username@hostname
表单。或者您可以通过 ~/.ssh/config 文件指定不同的用户名:
Host foo*
User foobar