You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用PHP登录SSH服务器时如何指定登录密码的问题咨询

问题原因

你当前使用的原生ssh命令默认禁止明文密码参数传递,会强制唤起交互式输入,所以无法直接在命令中拼接密码完成自动登录,以下是两种可直接落地的实现方案:


方案1:使用sshpass工具(适配你现有代码逻辑,改动最小)

首先需要在运行PHP的服务器上安装sshpass工具:

  • Debian/Ubuntu系统执行:apt install -y sshpass
  • CentOS/RHEL系统执行:yum install -y sshpass

然后修改你的代码中的$cmd_string拼接逻辑即可,新增自动跳过主机密钥校验的参数避免首次连接卡交互:

<?php
    $server = "IP";
    $username = "root";
    $password = "pass";
    $port = "22";
    $command = "uptime";

    // 拼接带sshpass的命令,新增参数跳过主机密钥确认,escapeshellarg防止特殊字符解析错误
    $cmd_string = "sshpass -p ".escapeshellarg($password)." ssh -o StrictHostKeyChecking=no -p ".$port." ".$username."@".$server." ".$command;

    exec($cmd_string, $output, $return_var);

    echo '<pre>';
    print_r($output);
    echo '</pre>';
?>

方案2:使用PHP ssh2扩展(更安全,无需调用系统命令)

首先在运行PHP的服务器上安装ssh2扩展:

  • Debian/Ubuntu系统执行:apt install -y php-ssh2
  • 通用安装方式:pecl install ssh2
    安装后重启PHP服务生效。

完整实现代码如下:

<?php
    $server = "IP";
    $username = "root";
    $password = "pass";
    $port = 22;
    $command = "uptime";

    // 建立SSH连接
    $connection = ssh2_connect($server, $port);
    if (!$connection) die("SSH连接失败");

    // 密码认证
    if (!ssh2_auth_password($connection, $username, $password)) die("密码认证失败");

    // 执行命令读取输出
    $stream = ssh2_exec($connection, $command);
    stream_set_blocking($stream, true);
    $output = stream_get_contents($stream);
    fclose($stream);

    echo '<pre>';
    echo $output;
    echo '</pre>';
?>

更安全的替代方案:SSH密钥登录

不管用哪种方式传递明文密码都有泄露风险,推荐使用密钥认证实现无密码登录:

  1. 在运行PHP的服务器上执行ssh-keygen -t rsa,一路回车生成密钥对
  2. 执行ssh-copy-id -p 端口 用户名@远程服务器IP,把公钥上传到远程服务器
  3. 你原本的代码不需要任何修改,也不需要传递密码,运行时会自动用密钥完成认证,安全性最高。

内容的提问来源于stack exchange,提问作者yuptw llama

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 11:36:09