我可以使用root用户挂载远程SFTP目录,但是当我尝试运行bash脚本以自动执行相同操作时,脚本运行时没有错误,但是从不创建挂载。
我正在使用:
#!/bin/bash
_SSHHOST="sub.domain.com"
_SSHUSER="10001"
_SSHPASS="somepass"
_DATADIR="/mnt/data"
# Create user if doesn't exist
id -u $_SSHUSER &>/dev/null || useradd $_SSHUSER
# Create directory if doesn't exist
mkdir -p $_DATADIR/$_SSHUSER
# Change ownership of dir to new user
chown $_SSHUSER:root $_DATADIR/$_SSHUSER
/usr/bin/expect <<EOD
spawn sshfs $_SSHUSER@$_SSHHOST:/remote/dir $_DATADIR/$_SSHUSER
expect "Password: "
send "$_SSHPASS\r"
expect "#"
EOD
未创建任何安装且创建的目录中未列出任何文件。我很欣赏有些人会说要避免使用Bash并在Expect中直接创建它,但这只是执行大量bash函数的较大脚本的一小部分。我做错了什么?
感谢您的帮助。
更新
我通过将-o password_stdin
传递给sshfs
命令来修复此问题。谢谢大家的关注。
答案 0 :(得分:2)
所以我认为你遇到的问题只适用于你正在使用它的程序的输出
在这种情况下,sshfs会提示:
$_SSHUSER@$_SSHHOST's password:
一旦你正常输入密码,它就会分到后台,而且不会有#期望获得。
我认为你看到的是sshfs工具分叉后终端下一行的#,所以你不能指望
作为expect脚本的替代方法,sshfs通过带有
的stdin接受密码echo $_SSHPASS | sshfs -o password_stdin $_SSHUSER@$_SSHHOST:/remote/dir $_DATADIR/$_SSHUSER
答案 1 :(得分:0)
我通过将-o password_stdin传递给sshfs命令来修复此问题。谢谢大家的关注。