我想创建一个只能做一件事的用户:通过 ssh 指定驻留在一个特定文件夹中的脚本(和脚本的命令行参数)(为了这个问题,让我们称之为/local/remote_only_scripts/foo)并让该脚本执行并返回它的输出。
澄清一些我不希望用户能够做的事情的例子:
/bin/login. 它不是/local/remote_only_scripts/foo文件夹中的脚本,因此不应由用户调用。/bin/ls. 它不是相应目录中的脚本。请注意,这些示例还有许多其他我不希望用户能够执行的操作。在考虑一个动作时,问“这是由 中的脚本完成的/local/remote_only_scripts/foo吗?” 如果答案是否定的,用户就不能这样做。如果答案是肯定的,那么用户应该能够做到。
PS:让我澄清一下“添加用户”的意思。我的意思不是将用户添加到某个 ssh 子系统。相反,我的意思是将用户添加到计算机系统中。所以,例如,我有一个运行 debian stable 的系统,通过它的地址来调用它,www.hg.bar.com。我想添加一个用户(通过 kuser、users-admin 或 useradd 或类似的方式)称他为 hg_guest。hg_guest 无法在本地登录或执行上述列表中的任何操作。hg_guest 所能做的就是“远程”执行脚本。我说他应该可以通过ssh这样做,但现在想想,也许让他使用ssh可能会让他在本地登录,所以可能需要一些其他机制。
我想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' && \ …Run Code Online (Sandbox Code Playgroud)