小编its*_*dok的帖子

在一行中的服务器之间复制受保护的文件?

我想squid.conf从一台服务器复制到另一台服务器。

  • 服务器不互相交谈。我想通过我的工作站。
  • 两台服务器都有该文件,因此它将在目标上被覆盖。
  • 这些文件有600权限并且归 root 所有。
  • 通过 ssh 的 root 登录被禁用 ( PermitRootLogin no)。
  • 如果可能的话,我想在一行中完成,因为它将成为设置指南的一部分。

我知道要做

ssh source 'tar czpf - -C /etc/squid/ squid.conf' | \
    ssh target 'tar xzpf - -C /etc/squid/'
Run Code Online (Sandbox Code Playgroud)

在服务器之间复制文件并保留权限。但是,在这种情况下,我将收到“权限被拒绝”。

我也知道我可以这样做:

ssh -t source 'sudo cat /etc/squid/squid.conf'
Run Code Online (Sandbox Code Playgroud)

这种方式-t允许 sudo 在输出文件内容之前询问管理员密码。

问题是,我不知道如何将这些技术组合成在每台服务器上要求 sudo 密码的东西,并将文件传输到其目的地。这可能吗?

更新:这是我能想到的最好的:

ssh -t source 'sudo tar czf /tmp/squid.tgz -C /etc/squid squid.conf' && \
ssh source 'cat /tmp/squid.tgz' | \
    ssh target 'cat >/tmp/squid.tgz' && \ …
Run Code Online (Sandbox Code Playgroud)

ssh sudo file-transfer

13
推荐指数
1
解决办法
7676
查看次数

Bash:重定向到文件,总是创建新的

在 bash 中,一个命令链接

echo test > actual.txt
Run Code Online (Sandbox Code Playgroud)

将替换actual.txt用“test”调用的文件的内容,如果文件不存在则创建该文件。但是,如果文件确实存在,bash 只会打开它,截断它,然后将新内容写入文件。

具体来说,重定向命令在这种情况下会失败:

ln -s /some/illegal/path link.txt
echo test > link.txt
Run Code Online (Sandbox Code Playgroud)

Bash 4.4.12 给了我令人困惑的错误信息link.txt: No such file or directory

避免这种情况的一种方法是确保在运行重定向命令之前删除文件。

rm link.txt && echo test > link.txt
Run Code Online (Sandbox Code Playgroud)

不过,我想知道是否对 bash 选项或重定向运算符进行了一些调整,以防止这种失败模式。有任何想法吗?

bash io-redirection symlink

8
推荐指数
1
解决办法
8127
查看次数

定界符内“$@”的扩展

考虑以下脚本1

#!/bin/bash
bash <<END
printf "%s\n" "$@"
END
Run Code Online (Sandbox Code Playgroud)

令人惊讶的是(对我来说),$@这里文档的内部首先被扩展,然后被引用,所以这是输出:

$ /tmp/test.sh "a a" b c
a a b c
Run Code Online (Sandbox Code Playgroud)

如果我删除引号,我会得到简单的$@行为:

$ /tmp/test.sh "a a" b c
a
a
b
c
Run Code Online (Sandbox Code Playgroud)

这两个选项都无法提供所需的输出。我尝试使用类似 的数组args=("$@"),但扩展的行为方式相同。我尝试将“结果”放入诸如 之类的变量中args="$@",但这只会返回“aab c”。

有什么想法如何使输出如下所示?

a a
b
c
Run Code Online (Sandbox Code Playgroud)

1显然,这是非常简单的。实际上,我正在使用heredoc来执行脚本docker run,但这对这个问题来说并不重要。

bash shell-script

3
推荐指数
1
解决办法
675
查看次数

标签 统计

bash ×2

file-transfer ×1

io-redirection ×1

shell-script ×1

ssh ×1

sudo ×1

symlink ×1