我想将我的主机复制到远程/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