SSH Sudo 管道命令

5
这个命令有效。
ssh -t www.foo.com 'sudo ls -l'

一旦输入密码,我立即被要求提供密码,然后获得目录内容。

如果我尝试使用管道符号运行此命令,则会失败 - 我从未被要求输入密码,因此也无法获取任何内容。

ssh -t www.foo.com 'sudo ls -l' | grep 'foo'

这是一个基本示例,我知道可以使用管道/过滤器来处理"ls"命令的输出。但对于我的应用程序,我需要将输出通过主机上的程序进行处理。

1
请澄清一下:在 ssh -t www.foo.com 'sudo ls -l' 中,当您输入密码时,是为了 ssh 还是 sudo?即:(1)ssh 使用公钥身份验证,不需要密码,但远程 sudo 需要密码;或者相反:(2)使用基于密码的 ssh,但远程系统允许无密码 sudo。 - Joshua Huber
抱歉,该密码是用于sudo命令的。使用公钥密钥已处理完SSH。 - veilig
谢谢。这缩小了问题的范围。有趣的问题。我正在尝试找到一个解决方案。 - Joshua Huber
4个回答

1
为了在发出sudo命令时不被要求输入密码,你需要在/etc/sudoers(或更好的是/etc/sudoers.d中的文件)中拥有一个条目来允许你这样做。关于使用sudoers的问题有一个很好的问题在这里
允许你以root身份运行ls的sudoers配置可能是:
<yourusername> ALL = (root) NOPASSWD: /bin/ls

需要注意的是,ls 很可能是一个 shell 内置命令,因此您可能会遇到允许它的问题。您应该能够将您的 shell 设置为优先使用系统二进制文件。

试图通过它来传输您的真实密码并不安全。


0
ssh -t www.foo.com 'echo your_pass | sudo -S ls -l' | grep 'foo'

0

也可能:

ssh -t www.foo.com 'sudo -S ls -l <~/passwd.txt' | grep 'foo'

0
你没有收到密码提示的原因是因为你将“ssh -t www.foo.com 'sudo ls -l'”命令的输出输入到了管道中,然后在其中搜索“foo”。所以在这种情况下,密码提示不会显示,但实际上该进程正在等待你的输入。
尝试在运行命令后在空白新行上输入密码。
我尝试过这个方法,它有效。例如: $ ssh -t user@host 'sudo ls -l /' | grep 'root' user@host's password: <===== 在此之后,它等待用户输入sudo用户的密码。 Connection to host closed. drwxr-xr-x 2 root root 4096 2011-08-31 15:33 bin dr-xr-xr-x 24 root root 4096 2014-07-14 00:52 bldmnt dr-xr-xr-x 2 root root 4096 2011-03-23 15:51 blr drwxr-xr-x 3 root root 4096 2011-08-31 15:36 boot . . .
你可以尝试一下,看看是否适用于你。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接