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

如何实现SSH自动输入密码,保障/etc/rc.local中SSH隧道脚本正常运行

SSH自动认证实现方案

方案1:SSH密钥认证(优先推荐,无明文密码风险)

这是SSH官方推荐的免密登录方案,安全性和稳定性远高于明文传密码的实现,操作步骤如下:

  • 切换到rc.local执行对应的用户(默认是root),执行密钥生成命令,全程按回车不要设置密钥密码:
    # 新系统推荐用ed25519算法
    ssh-keygen -t ed25519
    # 老系统不支持ed25519则用RSA算法
    # ssh-keygen -t rsa -b 4096
    
  • 把生成的公钥上传到远程服务器的授权列表,执行后输入一次远程SSH密码即可:
    ssh-copy-id ubuntu@20.115.5.61
    
  • 手动执行一次隧道命令验证免密是否生效:
    ssh -fN -R 3049:localhost:2049 ubuntu@20.115.5.61
    
    无需输入密码且隧道正常运行的话,你原有写在/etc/rc.local里的脚本不需要做任何修改,开机即可自动执行。
    注意:如果rc.local以root身份运行,所有上述操作都需要在root用户下执行,确保密钥存储在/root/.ssh目录下,避免脚本读取不到密钥的问题

方案2:sshpass明文传密码(仅应急使用,安全性极低)

如果受环境限制无法使用密钥认证,可以用sshpass工具传递明文密码,操作步骤如下:

  • 先安装sshpass工具:
    # Debian/Ubuntu系
    apt update && apt install -y sshpass
    # CentOS/RHEL系
    yum install -y sshpass
    
  • 修改/etc/rc.local里的脚本,将cmd变量替换为如下内容,将你的远程SSH密码替换为实际密码:
    cmd="sshpass -p '你的远程SSH密码' ssh -o StrictHostKeyChecking=no -fN -R ${remote_port}:localhost:${local_port} ${remote_host}"
    
    新增的-o StrictHostKeyChecking=no参数用于跳过首次连接的主机指纹确认提示,避免脚本卡住。
    注意:该方案会将SSH密码明文存储在脚本中,任何有权限读取rc.local文件的用户都可以获取到服务器密码,仅建议在内网完全可信的环境下临时使用

内容的提问来源于stack exchange,提问作者James Van Halen

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 22:27:07