Fab*_*ien 6 linux ssh sudo redirection permissions
阅读完这个问题后,我知道我必须这样做
sudo sh -c 'ls -hal /root/ > /root/test.out'
Run Code Online (Sandbox Code Playgroud)
以避免“权限被拒绝”错误。
但是当我这样做时
ssh hostname sudo sh -c 'ls -hal /root/ > /root/test.out'
Run Code Online (Sandbox Code Playgroud)
从另一台机器,我得到
bash: /root/test.out: Permission denied
Run Code Online (Sandbox Code Playgroud)
为什么?我怎样才能让它发挥作用?
编辑:有这条线
Defaults:<username> !requiretty
Run Code Online (Sandbox Code Playgroud)
前
<username> ALL= NOPASSWD: ALL
Run Code Online (Sandbox Code Playgroud)
在/etc/sudoers。
我可以
ssh remote-machine 'sudo ls /'
Run Code Online (Sandbox Code Playgroud)
没有任何问题。所以我不认为这是一个 tty 问题。添加 -t 并不能解决问题。
问题在于引号是由本地 shell 解释和剥离的,而不是远程 shell;你需要一个额外的级别:
ssh host sudo sh -c '"ls -hal /root/ > /root/test.out"'
本地 shell 将使用一级引用 - 单引号在这里被“用完”,ssh 将获取参数host, sudo, sh, -c, 和"ls -hal /root/ > /root/test.out"。
远程shell消耗下一层-双引号-并呼吁sudo有sh,-c和ls -hal /root/ > /root/test.out。
最后,sh使用-c和ls -hal /root/ > /root/test.out-调用实例(以 root 身份运行)并将该单个参数解析为普通命令行,评估重定向。
要查看所有这些,请在目标系统上尝试运行sudo strace -f -e execve -p $(cat /var/run/sshd.pid).
| 归档时间: |
|
| 查看次数: |
2210 次 |
| 最近记录: |