讲师中心 微信公众号
AI工具推荐 视频效率加速

使用 PHP exec 函数通过 sshpass 实现自动化 SSH 密码登录

轻敏同学_6276

轻敏同学_6276

发布时间:2025-11-11 13:03:01

|

466人浏览过

|

来源于php中文网

原创

使用 php exec 函数通过 sshpass 实现自动化 ssh 密码登录

本文详细介绍了如何在 PHP 中利用 `exec` 函数结合 `sshpass` 工具实现对远程服务器的自动化 SSH 登录,无需手动输入密码。教程涵盖了 `sshpass` 的安装、PHP 代码的集成与修改,并重点强调了在生产环境中硬编码密码的安全风险,推荐使用 SSH 密钥对进行更安全的身份验证。

通过 PHP 自动化 SSH 登录与密码管理

在某些自动化场景中,我们可能需要在 PHP 脚本中执行远程服务器上的 SSH 命令。然而,标准的 ssh 命令在非交互式环境中无法直接处理密码输入,这给自动化带来了挑战。本文将介绍如何利用 sshpass 工具解决这一问题,实现在 PHP 中自动化 SSH 登录并传递密码。

理解 SSH 密码输入问题

当在 PHP 中使用 exec() 函数执行 ssh 命令时,例如:

<?php
$server = "your_server_ip";
$username = "your_username";
$command = "uptime";
$cmd_string = "ssh " . $username . "@" . $server . " " . $command;
exec($cmd_string, $output);
print_r($output);
?>

如果远程服务器需要密码验证,ssh 命令会尝试进入交互式模式提示用户输入密码。然而,exec() 函数执行的命令是在后台运行的,无法提供交互式输入,因此 SSH 连接会失败或挂起。

立即学习“PHP免费学习笔记(深入)”;

解决方案:使用 sshpass

sshpass 是一个专门用于非交互式 SSH 密码认证的工具。它允许用户在命令行中直接提供密码,从而避免了交互式提示。

1. 安装 sshpass

sshpass 通常不是系统默认安装的,需要手动安装。根据您的操作系统,可以使用以下命令进行安装:

macOS Automator Services
macOS Automator Services

部署和使用军舰的 macOS Automator 自动化服务集合。包含 5 个实用工作流:PDF转JPG、PNG重命名并转JPG、图像拼接、解压RAR、顺序命名图像文件。一键安装所有服务到 ~/Library/Services/ 目录。使用场景:(1) "安装我的自动化服务",(2) "部署所有 Automato...

下载
  • Debian/Ubuntu:
    sudo apt-get update
    sudo apt-get install sshpass
  • CentOS/RHEL:
    sudo yum install sshpass

    如果 yum 找不到 sshpass,可能需要先安装 EPEL 仓库:

    sudo yum install epel-release
    sudo yum install sshpass
  • macOS (通过 Homebrew):
    brew install sshpass

安装完成后,可以通过运行 sshpass -V 命令来验证是否成功安装。

2. 在 PHP 中集成 sshpass

安装 sshpass 后,我们就可以将其集成到 PHP 的 exec() 命令中。sshpass 的基本用法是 sshpass -p 'your_password' ssh ...。

以下是修改后的 PHP 代码示例,它将使用 sshpass 来传递密码:

<?php

    // 远程服务器的 IP 地址或域名
    $server = "192.168.254.254"; // 请替换为您的服务器IP

    // SSH 用户名
    $username = "root";

    // SSH 密码
    $password = "your_secret_password"; // **重要:请替换为您的实际密码**

    // SSH 端口
    $port = "22";

    // 要在远程服务器上执行的命令
    $command = "uptime";

    // 构建完整的命令字符串,包含 sshpass
    // 注意:密码直接嵌入命令字符串存在安全风险,仅作示例
    $cmd_string = "sshpass -p '" . escapeshellarg($password) . "' ssh -p " . escapeshellarg($port) . " " . escapeshellarg($username) . "@" . escapeshellarg($server) . " " . escapeshellarg($command);

    // 调试输出生成的命令字符串(可选)
    // echo "执行命令: " . $cmd_string . "<br>";

    // 在本地服务器(PHP 文件所在服务器)上执行上述命令
    // output 数组将包含命令的每一行输出
    $output = [];
    $return_var = 0; // 存储命令的返回状态码
    exec($cmd_string, $output, $return_var);

    // 返回输出到浏览器
    echo '<h2>远程服务器 ' . $server . ' 的 ' . $command . ' 命令输出:</h2>';
    if ($return_var === 0) {
        // 命令成功执行
        echo '<pre>';
        print_r($output);
        echo '</pre>';
    } else {
        // 命令执行失败
        echo '<p style="color: red;">命令执行失败,返回码: ' . $return_var . '</p>';
        echo '<pre style="color: red;">错误输出:';
        print_r($output);
        echo '</pre>';
        // 常见的失败原因:sshpass未安装、密码错误、SSH连接问题、远程命令不存在等
    }
?>

代码解释:

  • escapeshellarg(): 这个 PHP 函数用于转义命令行参数,以防止命令注入攻击。强烈建议对所有用户提供的或包含特殊字符的参数使用此函数。
  • sshpass -p 'your_password': sshpass 的 -p 选项后面直接跟密码。注意密码用单引号 ' ' 包裹,以防特殊字符干扰。
  • exec($cmd_string, $output, $return_var): exec() 函数的第三个参数 $return_var 可以捕获命令的返回状态码。0 通常表示成功,非 0 表示失败。这对于错误排查非常有用。

安全注意事项与最佳实践

尽管 sshpass 解决了自动化密码输入的问题,但在生产环境中直接在脚本中硬编码密码是非常不安全的行为。以下是更安全的替代方案和建议:

  1. 使用 SSH 密钥对 (推荐): 这是最安全和推荐的自动化 SSH 登录方式。

    • 在 PHP 运行的服务器上生成 SSH 密钥对(公钥和私钥)。
    • 将公钥添加到远程服务器的 ~/.ssh/authorized_keys 文件中。
    • 在 PHP 脚本中,使用 ssh -i /path/to/your/private_key ... 命令进行连接,无需密码。
    • 确保私钥文件权限设置正确(例如 chmod 600 /path/to/your/private_key)。
  2. 环境变量或配置文件: 如果必须使用密码,可以考虑将密码存储在只有 PHP 进程才能访问的环境变量中,或者存储在受严格权限保护的配置文件中,而不是直接写在代码里。

  3. 限制 sshpass 的使用范围: 如果非用 sshpass 不可,确保只在受信任的、隔离的环境中使用,并严格限制其权限。

  4. 最小权限原则: 用于 SSH 登录的用户应该只拥有执行所需任务的最小权限。

总结

通过 sshpass 工具,我们可以在 PHP 中实现非交互式的 SSH 密码认证,从而自动化远程命令的执行。然而,为了确保系统的安全性,强烈建议在生产环境中使用 SSH 密钥对进行身份验证,并避免在代码中硬编码敏感信息。在任何自动化场景中,安全都应是首要考虑的因素。

相关文章

PHP速学教程(入门到精通)
PHP速学教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热门AI工具

更多
豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

Seko
Seko Hot

一款AI视频创作工具,主要用于商汤科技推出的创编一体的AI短视频创作Agent,适合需要提升相关任务效率的用户。

音述AI
音述AI Hot

一款AI音频处理工具,主要用于音述AI是一个以“用声音述说故事”为核心的 AI 音乐创作与声音分享社区,适合需要提升相关任务效率的用户。

火山引擎

火山引擎是一款面向企业的云计算与AI服务平台。

DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

VibeKnow
VibeKnow Hot

一款AI视频创作工具,主要用于全球首个AI知识视频创作平台,文档、文章、网页,一键生成视频,适合需要提升相关任务效率的用户。

Lovart
Lovart Hot

一款面向视觉设计创作的AI设计平台,可通过智能体和画布工作流辅助制作海报、Logo、网页、PPT及其他视觉内容。

讯飞绘文

讯飞绘文是一款由科大讯飞推出的一站式 AIGC 内容运营平台。

WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

相关专题

更多
macOS怎么切换用户账户
macOS怎么切换用户账户

在 macOS 系统中,可通过多种方式切换用户账户。如点击苹果图标选择 “系统偏好设置”,打开 “用户与群组” 进行切换;或启用快速用户切换功能,通过菜单栏或控制中心的账户名称切换;还能使用快捷键 “Control+Command+Q” 锁定屏幕后切换。

4344

2025.05.09

常见的linux系统有哪些
常见的linux系统有哪些

linux系统有Ubuntu、Fedora、CentOS、Debian、openSUSE、Arch Linux、Gentoo、Slackware、Linux Mint、Kali Linux。更多关于linux系统的文章详情请阅读本专题下面的文章。php中文网欢迎大家前来学习。

6301

2023.10.27

ubunt上安装和配置vnc
ubunt上安装和配置vnc

安装方法:安装VNC服务器、启动VNC服务器、设置VNC密码等等。想了解更多ubuntu的相关内容,可以阅读本专题下面的文章。

2021

2023.12.28

ubuntu启动黑屏解决方法
ubuntu启动黑屏解决方法

ubuntu启动黑屏解决方法:检查是否是电源问题、检查内存是否接触不良、检查显卡问题等。想了解更多ubuntu的相关内容,可以阅读本专题下面的文章。

1790

2023.12.28

为什么ubuntu有网络连接但不能上网
为什么ubuntu有网络连接但不能上网

ubuntu有网络连接但不能上网的原因:1、dns配置问题;2、代理服务器设置问题;3、网络防火墙设置问题;4、路由器或调制解调器设置问题;5、网络驱动程序问题;6、网络配置文件问题;7、其他问题。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

1041

2024.09.05

ubuntu安装golang
ubuntu安装golang

本专题整合了ubuntu安装golang所有方法汇总,阅读下面的文章了解更多详细操作。

359

2025.12.13

Linux如何安装Ubuntu并完成基础系统优化教程
Linux如何安装Ubuntu并完成基础系统优化教程

访问Ubuntu官网或国内镜像站下载ISO镜像,利用Rufus或Etcher工具制作USB启动盘。重启电脑进入BIOS设置U盘引导,按提示完成分区与账户设置以安装系统。安装完毕后,首要任务是将软件源更换为国内镜像以加速下载,接着在终端执行更新命令升级系统组件,并安装显卡驱动及常用开发工具,至此即可完成基础环境搭建与优化。

104

2026.03.31

Ubuntu系统安装与基础配置
Ubuntu系统安装与基础配置

本指南详解Ubuntu系统安装全流程:从制作启动盘、分区规划到驱动配置,手把手带你完成系统部署。涵盖软件源优化、常用工具安装及桌面个性化设置,助你快速搭建稳定高效的Linux开发环境,零基础也能轻松上手。

126

2026.04.15

PixTV官网入口地址合集
PixTV官网入口地址合集

本专题汇总了 PixTV AI 一站式视频创作平台的官方入口与使用教程。无需下载软件,浏览器直接访问即可使用。平台将剧本、图像、视频、声音与剪辑整合在“无限画布”中,接入 GPT Image 2.5、Seedance 2.5 等头部模型。本专题整理了从新建画布、角色锚定、分镜拆分到视频生成与导出的完整操作指南,助你快速上手 AI 短剧与漫剧创作。

60

2026.10.10

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
墨刀帮助中心
墨刀帮助中心

共0课时 | 0人学习

MyEclipse学习中心
MyEclipse学习中心

共0课时 | 0人学习

Apache Subversion 官方手册
Apache Subversion 官方手册

共0课时 | 0人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn