考虑以下命令:
ssh aristotle sudo /bin/sh < test.sh
我想应用重定向/bin/sh
,但它被 sudo 占用了。关于如何实现我想要的,有什么想法吗?
答案1
为什么不直接复制 test.sh 然后调用它呢?
scp test.sh aristotle:/tmp/test.$$.sh
ssh aristotle sudo /bin/sh /tmp/test.$$.sh
ssh aristotle rm /tmp/test.$$.sh
$$ 是本地机器上进程的 PID,具有一定程度的随机性,因此您的文件不会被破坏。
答案2
重定向是使用 ssh 和 sudo!它只会干扰来自 ssh 和/或 sudo 的任何密码对话框。
因此,您要么不使用重定向,要么使用其他解决方法,例如先将脚本复制到目标机器,然后执行它(例如@edoloughlin建议)。
或者,你可以将 ssh 和 sudo 配置为不提示输入密码。然后它就会像魔法一样工作:
$ echo "hostname" | ssh -A orwell sudo /bin/sh
orwell
有成千上万的指南解释了如何无密码使用 ssh,所以我就不解释那部分了。至于 sudo,有几种方法可以无密码使用。@jtimberman建议允许相关用户无密码使用 sudo(通过 sudoNOPASSWD
功能,请参阅sudoers(5))。
我个人使用 PAM 模块pam-ssh-代理。它允许 sudo 针对转发的 ssh 代理进行身份验证,并且只有在没有可用的 ssh 代理时才会回退到基于密码的身份验证。在 Debian 和 Ubuntu 上
apt-get install pam-ssh-agent-auth
然后按照说明进行配置pam_ssh_agent_auth(8)。
答案3
尝试一下这个方法:
ssh aristotle sudo /bin/sh -c "/bin/sh \\< test.sh"
答案4
我使用了ssh somehost sudo cat \< /etc/passwd
一些成功;尝试以下方法:
ssh aristotle sudo /bin/sh \< test.sh