使用Bash进程替换时,在ssh上提供sudo密码?
发布时间:2020-12-15 18:32:32 所属栏目:安全 来源:网络整理
导读:我的问题可以看作是 How do diff over ssh?的延伸而有点扭曲. 环境 macOS Sierra(10.12.3) OpenSSH 7.3 示例情况 我试图在两个文件之间打印差异,其中一个位于远程主机上,需要sudo才能读取. 如果我的远程用户可以读取这个远程文件(或者如果我可以使用sudo标志
我的问题可以看作是
How do diff over ssh?的延伸而有点扭曲.
环境 macOS Sierra(10.12.3) 示例情况 我试图在两个文件之间打印差异,其中一个位于远程主机上,需要sudo才能读取. 如果我的远程用户可以读取这个远程文件(或者如果我可以使用sudo标志NOPASSWD执行命令),我只需执行: diff LOCALFILE <(ssh host 'cat REMOTEFILE') 但是我需要进行身份验证才能执行远程命令,这意味着我必须使用ssh -t分配一个伪终端,并且以下执行永远不会完成: diff LOCALFILE <(ssh -t host 'sudo cat REMOTEFILE') 故障排除 ps告诉我ssh进程已停止: STAT TIME COMMAND S+ 0:00.00 diff LOCALFILE /dev/fd/12 T 0:00.03 ssh -t host sudo cat REMOTEFILE 此时ssh进程不响应SIGTERM,并且上面的文件描述符不存在: ? ls -l /dev/fd total 0 crw--w---- 1 me tty 16,2 Feb 23 17:36 0 crw--w---- 1 me tty 16,2 Feb 23 17:36 1 crw--w---- 1 me tty 16,2 Feb 23 17:36 2 dr--r--r-- 1 root wheel 0 Feb 23 09:33 4 额外的笔记 无论sudo是否需要密码,我都可以在进程替换中使用ssh -t时观察完全相同的行为(我知道如果遥控器上没有预期输入,则使用-t是有问题的主办). 底线 我在这里使用diff作为例子,但我的问题实际上更为通用:有没有办法将Bash process substitution和SSH伪终端分配一起使用?
您可以使用-S选项强制sudo从STDIN获取密码,每
this superuser post.因此语法 diff LOCALFILE<(ssh host'echo< password> | sudo -S cat REMOTEFILE’)应该做你需要的,而不需要伪终端.
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
推荐文章
站长推荐
热点阅读