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

Expect自动输入密码实现sshfs远程目录挂载失效问题排查求助

解决Expect自动挂载sshfs无内容的问题

我来帮你排查这个问题,你的脚本思路没问题,但几个细节没处理到位,导致挂载没成功却没抛出报错。下面是具体的原因分析和修复方案:

1. 移除多余的interact命令

你的脚本最后用了interact,这个命令是把终端控制权交还给用户,但sshfs是一次性执行的挂载命令,成功挂载后就会退出,完全不需要交互。interact会让脚本卡在那里,既没法正常结束,也可能导致挂载进程异常中断。

修改后的基础脚本:

#!/usr/bin/expect
set timeout 10
spawn bash -c "sshfs XXX@remote_computer:/raidc/users/XXX LocalDirectory/"
expect {
    "XXX@remote_computer's password: " {
        send "mypasswd\r"
        exp_continue
    }
    eof
}

这里用expect块处理密码提示,然后等待命令执行完成(捕获eof),确保挂载流程走完。

2. 处理首次连接的主机密钥验证

如果是第一次连接目标远程机器,sshfs会弹出主机密钥确认提示(比如The authenticity of host 'remote_computer (x.x.x.x)' can't be established...),你的脚本没处理这个场景,会直接卡在那里,既不报错也不继续执行。

可以在脚本里加入对这个提示的处理:

#!/usr/bin/expect
set timeout 10
spawn bash -c "sshfs XXX@remote_computer:/raidc/users/XXX LocalDirectory/"
expect {
    "Are you sure you want to continue connecting (yes/no)? " {
        send "yes\r"
        exp_continue
    }
    "XXX@remote_computer's password: " {
        send "mypasswd\r"
        exp_continue
    }
    eof
}

这样就能自动处理首次连接的密钥确认,避免脚本卡住。

3. 检查挂载权限与目录存在性

  • 先确保本地的LocalDirectory/已经创建,并且当前用户有读写权限:
    mkdir -p LocalDirectory
    chmod 755 LocalDirectory
    
  • 确认远程目录/raidc/users/XXX确实存在,并且你的远程用户XXX有访问该目录的权限(比如读权限)。

4. 添加挂载验证步骤

可以在脚本末尾加一段检查,确认挂载是否真的成功:

#!/usr/bin/expect
set timeout 10
spawn bash -c "sshfs XXX@remote_computer:/raidc/users/XXX LocalDirectory/"
expect {
    "Are you sure you want to continue connecting (yes/no)? " {
        send "yes\r"
        exp_continue
    }
    "XXX@remote_computer's password: " {
        send "mypasswd\r"
        exp_continue
    }
    eof
}
# 验证挂载是否成功
spawn bash -c "mount | grep sshfs"
expect eof

执行脚本后,看看输出里有没有对应sshfs的挂载条目,就能明确挂载是否真的完成。

5. 改用SSH密钥认证(更推荐)

其实用Expect自动输密码不是最安全可靠的方式,推荐你配置SSH密钥认证,这样完全不需要密码就能挂载:

  1. 生成本地密钥对(一路回车默认设置即可):
    ssh-keygen -t ed25519
    
  2. 将公钥复制到远程机器:
    ssh-copy-id XXX@remote_computer
    

之后直接执行sshfs XXX@remote_computer:/raidc/users/XXX LocalDirectory/就能自动挂载,不需要Expect脚本,更稳定也更安全。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.30 06:29:08