【问题标题】:SSH into a machine using PHP使用 PHP SSH 进入机器
【发布时间】:2016-01-09 04:43:14
【问题描述】:

我正在尝试

  • SSH 进入我的虚拟机
  • 转到特定目录
  • 运行脚本

我的命令

ssh user@45.12.129 "cd ~/scripts; pwd; ./startVM.sh"

PHP

$cmd = 'ssh user@45.12.129 "cd ~/scripts; pwd; ./startVM.sh";
$data = shell_exec($cmd);

我不确定何时输入密码。 我希望有人可以填写我错过的内容。

【问题讨论】:

  • 以 root 身份远程登录机器不是一个好主意。也尽量不要以root身份运行。整理文件权限以将其作为另一个帐户运行。提高安全性

标签: php ssh shell-exec


【解决方案1】:

最简单(虽然不一定最安全)的方法是创建一个无密码的 ssh 密钥并将其添加到您的 VM:

  • 运行 ssh-keygen 来创建一个新的公钥/私钥对(如果您还没有(或者如果您想为此目的创建一个新密钥))
  • 将生成的公钥放入 VM 中用户的 ~/.ssh/authorized_keys 中。确保此文件只能由目标用户读写。 (它应该有 0500 模式。)
  • ssh 现在无需密码即可工作。 (实际上,私钥就是密码。)
  • 如果要指定要使用的特定密钥,请使用ssh -i path-to-key-file 指定。

警告:请记住,允许远程执行代码可能非常危险,尤其是当目标是 root 帐户时。如果这是本地虚拟机,您应该相对安全,但在一般情况下使用此技术时要小心,尤其是在互联网上。像这样,你可以很容易地射中自己的脚。

为此,您可能希望在 VM 中创建一个非 root 用户。如果该用户需要 root 权限才能完成其任务,则使用sudo 和适当的sudoers 文件条目仅授予对其所需的特定功能的访问权限。

【讨论】:

  • 补充:为了更安全,您可以通过在授权密钥文件中添加 command="..." 来将授权的 SSH 密钥限制为一个给定的特定命令。
【解决方案2】:

你能试试这样的吗?

        if(!($con = ssh2_connect($ip, $port))){
            echo'cannot connect';
        } else {
            //Auth
            if(!ssh2_auth_password($con, "userssh", "password")) {
                echo'authentication failed';
            } else {
                //Execute command
                if(!($stream = ssh2_exec($con, "cd ~/scripts; pwd; ./startVM.sh" )) ){
                    echo 'failed executing';
                } else {
                     echo 'sucess';

                }
            }
         } 

【讨论】:

  • 感谢您的回答。太棒了:)
  • 我尝试了您的解决方案。我得到了Call to undefined function App\ssh2_connect()
  • 因为我在 Mac 上,我已经安装了 brew install php56-ssh2 ,我仍然得到同样的错误。我希望你不介意填写我错过的内容。 :)
  • 尝试安装 SSH2 PECL 并在重启 apache 后启用检查
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-12-01
  • 1970-01-01
  • 2021-11-12
  • 2020-02-08
  • 1970-01-01
  • 2016-03-28
相关资源
最近更新 更多