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

树莓派4:无需raspi-config,通过Python程序切换SSH开关

树莓派物理开关控制SSH状态的无交互实现方案

1. 核心命令:直接控制SSH服务(即时生效,推荐)

树莓派的SSH服务通过systemd管理,可使用以下无交互命令直接切换状态:

  • 开启SSH(即时生效+开机自启):
    sudo systemctl enable --now ssh
    
  • 关闭SSH(即时生效+禁止开机自启):
    sudo systemctl disable --now ssh
    
  • 查看当前SSH状态:
    systemctl is-active ssh
    
    返回active表示已开启,inactive表示已关闭。

2. 备用方案:通过boot分区文件控制(启动时生效)

树莓派启动时会检测/boot/ssh文件,存在则自动开启SSH,删除则下次启动关闭(注意:此方法不影响当前运行的SSH服务,仅控制开机状态):

  • 创建文件开启SSH:
    sudo touch /boot/ssh
    
  • 删除文件关闭SSH(下次启动生效):
    sudo rm -f /boot/ssh
    

3. Python脚本实现开关联动

使用subprocess模块执行上述命令,结合GPIO检测物理开关状态,示例代码如下(需root权限运行):

import subprocess
import time
import RPi.GPIO as GPIO

# 自定义开关连接的GPIO引脚(根据实际接线修改)
SWITCH_PIN = 17

def toggle_ssh(enable):
    if enable:
        subprocess.run(["sudo", "systemctl", "enable", "--now", "ssh"], check=True)
        print("SSH已开启")
    else:
        subprocess.run(["sudo", "systemctl", "disable", "--now", "ssh"], check=True)
        print("SSH已关闭")

def get_current_ssh_state():
    result = subprocess.run(["systemctl", "is-active", "ssh"], capture_output=True, text=True)
    return result.stdout.strip() == "active"

# GPIO初始化(假设开关接地时触发开启)
GPIO.setmode(GPIO.BCM)
GPIO.setup(SWITCH_PIN, GPIO.IN, pull_up_down=GPIO.PUD_UP)

try:
    # 初始状态同步
    switch_state = GPIO.input(SWITCH_PIN)
    desired_state = not switch_state
    if desired_state != get_current_ssh_state():
        toggle_ssh(desired_state)
    
    # 监听开关状态变化
    while True:
        new_switch_state = GPIO.input(SWITCH_PIN)
        if new_switch_state != switch_state:
            switch_state = new_switch_state
            toggle_ssh(not switch_state)
        time.sleep(0.5)
except KeyboardInterrupt:
    print("程序终止")
finally:
    GPIO.cleanup()
  • 运行方式:sudo python3 your_script.py
  • 接线说明:开关一端接GPIO17,另一端接地,树莓派内部上拉电阻会保持引脚默认高电平,拨动开关接地时触发状态切换。

4. raspi-config非交互替代命令

如果需要沿用raspi-config的配置逻辑,可使用以下无交互命令:

  • 开启SSH:
    sudo raspi-config nonint do_ssh 0
    
  • 关闭SSH:
    sudo raspi-config nonint do_ssh 1
    

此命令本质与systemctl方式效果一致,但systemctl更直接高效。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 10:35:41