scp 后 sudo 为超级用户

scp 后 sudo 为超级用户

为了将代码部署到服务器,我运行了一个脚本,该脚本使用我的私钥将部署文件 scp 到服务器上。但是在 scp 之后,我必须手动 ssh 到机器 sudo 到超级用户帐户并运行部署脚本。

我也想使第二步自动化,但不知道如何做。

这两步过程还有其他替代方案吗?

答案1

如果控制 sudoers 文件的人会更改它,以便您可以在没有密码的情况下运行某些命令,那么它将像运行一样简单:

$ ssh other-host sudo /path/to/deployment.script

如果没有,那么您可以让 sudo 从文件中获取输入:

$ ssh other-host 'sudo -S /path/to/deployment.script < password.file'

但是,不要这么做,因为这意味着你将密码放入文件中。服务器管理员应该为此狠狠教训你。

比以上所有方法更好的选择是让服务器管理员在 root 的 authorized_keys 文件中设置一个仅允许运行部署脚本的条目。这样,要运行脚本,您只需使用特殊密钥以 root 身份通过 ssh 进入服务器即可。

答案2

为此目的,在远程主机上创建一个密钥对,将其添加到您要部署到的服务器上的 root 授权密钥文件中。在密钥前面添加“command="cat - >> file.name;deploy_script.sh" ,no-port-forwarding,no-X11-forwarding,no-agent-forwarding,no-pty”在远程主机上运行“cat /path/to/file|ssh -i /path/to/key”

您还可以使用授权密钥文件中的以下内容通过 scp 进行设置

命令“scp -t /destination/directory/;deploy_script.sh”,无端口转发,无X11转发,无代理转发,无pty ssh-dss xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx 用户@remote_server

如果您无法访问 root 的 authorized_keys2 文件,请将其与无密码 sudo 结合使用。如果不允许,请使用 ssh、scp 和 expect。

答案3

你可以用某种基于 cron 的解决方案轻松地做到这一点

#!/bin/bash

if [ -f /path/to/deployment.script ]; then
    mv /path/to/deployment.script /path/to/somewhere/else
    do_deployment
fi

每隔几分钟从 cron 以 root 身份运行这样的脚本应该可以满足您的需要。可能有更优雅的方法来做到这一点,但这是我想到的最简单/最快的方法。

答案4

我建议使用 Chef 或 Puppet 之类的东西来处理这个问题,因为它们可能比手动方法更安全。

相关内容