its*_*dok 13 ssh sudo file-transfer
我想squid.conf
从一台服务器复制到另一台服务器。
600
权限并且归 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' && \
ssh -t source 'sudo rm /tmp/squid.tgz' && \
ssh -t target \
'sudo tar xzf /tmp/squid.tgz -C /etc/squid && sudo rm /tmp/squid.tgz'
Run Code Online (Sandbox Code Playgroud)
称其为单线似乎有点牵强。我想我会把它分解成设置指南中的单独步骤。
Gil*_*il' 12
使用 ssh 链接 ssh 比使用 sudo 链接 ssh 更容易。所以更改 ssh 服务器配置是可以的,我建议为每个服务器的 root 打开 ssh,但只能从本地主机。您可以使用Match
in 中的子句执行此操作sshd_config
:
PermitRootLogin no
Match Host localhost
PermitRootLogin yes
Run Code Online (Sandbox Code Playgroud)
然后,您可以设置从远程用户到本地用户以及从本地用户到 root 的基于密钥的身份验证链。您仍然有一个身份验证跟踪,因此您的日志会告诉您谁以 root 身份登录,并且身份验证步骤与涉及 sudo 时相同。
要以 root 身份连接到服务器,请定义一个别名,~/.ssh/config
如下所示:
Host server-root
HostName server.example.com
User root
ProxyCommand "ssh server.example.com nc %h %p"
Run Code Online (Sandbox Code Playgroud)
如果您坚持使用sudo
,我相信您将需要单独的命令,因为sudo
坚持从终端读取(即使它有您帐户的票)¹,并且没有任何常用的文件复制方法(scp、sftp、rsync)支持与远程终端交互。
坚持使用 ssh 和 sudo,可以简化您建议的命令。在每一方,如果您已将 sudo 设置为不再询问密码,您可以运行一次以克服密码要求,然后再运行一次以复制文件。(您不能轻松地直接复制文件,因为密码提示会妨碍您。)
ssh -t source 'sudo true'
ssh -t target 'sudo true'
ssh -t source 'sudo cat squid.conf' |
ssh -t target 'sudo tee /etc/squid/squid.conf'
Run Code Online (Sandbox Code Playgroud)
¹除非你有NOPASSWD
,但你不会问这个。
归档时间: |
|
查看次数: |
7676 次 |
最近记录: |