我想通过 SSH 复制远程 txt 文件,但不使用 root 访问权限

我想通过 SSH 复制远程 txt 文件,但不使用 root 访问权限

我想将我的主机复制到远程/etc/hosts,但它不起作用。我知道 root SSH 访问使事情变得更容易,但恕我直言,root SSH 访问有点危险。

 cat /etc/hosts|ssh samba2 "sudo su -c "sh -c cat > /etc/hosts""

该命令因权限被拒绝而失败;我的用户有sudo访问权限。

有什么解决办法吗?

答案1

cat /etc/hosts | ssh samba2 'sudo tee /etc/hosts > /dev/null'

该程序tee以 root 身份运行,因此可以/etc/hosts使用标准输入进行覆盖。扔掉tee's标准输出,因为我们不需要/不想看到它。

并且无需为不寻常的引用而跳过任何障碍。

如果您需要追加(如 中>>)而不是覆盖,则可以使用tee -a

答案2

ssh -tt samba "sudo bash -s" <<EOF
    echo "$(cat /etc/hosts)" >/etc/hosts
    exit 0
EOF

这将打开一个会话并运行一个提升的bash,其中的heredoc作为脚本传递,-tt参数用于ssh分配一个伪tty,否则sudo会抱怨,在heredoc中,命令替换将在本地进行,全文将得到远处传来回声。

编辑:围绕命令替换的引号。编辑2:向脚本添加退出,否则bash将继续等待命令。

答案3

给定的重定向将不起作用,但您可以分两步执行此操作:

  • 使用 scp 复制文件

  • 使用 sudo 更新远程计算机上的文件

例如

scp -p /etc/hosts samba2:
ssh -t samba2 sudo cp -f -v -p ~/hosts /etc/hosts

它尝试保留复制文件的权限。根据您使用的系统,该-p选项可能也会尝试保留文件所有权。对于这种情况,请使用

--preserve=mode,timestamps

如果您的脚本有问题(您可以擦除文件而不进行恢复),则替换/etc/hosts并不是最好的选择。/etc/hosts

相关内容