1

我需要为我在 fstab 中创建的 ssh 挂载创建一个自动登录脚本。

我知道您应该使用安全密钥身份验证来执行此操作,但在这种情况下这是不可能的,因为服务器不允许这样做,所以我需要创建一个 bash 脚本以在出现提示时输入密码。

我试过了

spawn mount /media/SSH-MUSIC

expect "*?assword:*"

send "password\r"

但我无法让它工作。

fstab条目如下

sshfs#user@xxx.xxx.xxx.xxx:/public/02.MUSIC /media/SSH-MUSIC fuse port=2223,noauto,users,allow_other,uid=1001,gid=1001,rw 0 0

有人可以提供一个允许我自动登录的工作脚本吗?我尝试了谷歌搜索的各种建议,但无法让它发挥作用。

4

4 回答 4

1

使用 时ssh,您可以使用密码,也可以使用公钥/私钥集。如果您使用公钥/私钥,则ssh无需输入密码即可用于另一台计算机:

  • 您需要ssh-keygen在两个系统上运行。$HOME/.ssh这会在您的计算机上创建一个目录。里面会有两个文件:一个是公钥,一个是私钥。在我的,私钥被调用id_rsa,公钥被调用id_rsa.pub。这是 Linux 和 Mac OS X 的默认设置。

  • 在两个系统上创建这些文件后,您需要获取您的公钥并将其粘贴到一个名为$HOME/.ssh/authorized_keys. 这将为远程计算机提供您的公钥,以便它可以识别您。

完成后,您应该能够在ssh不需要密码的情况下使用,这使得编写使用的脚本ssh变得更加容易。

于 2012-06-11T14:31:02.000 回答
0

Expect通常需要 "\r" 作为预期输入的行终止符,而 "\r\n" 作为输出。但是,在这种情况下,您实际上并不需要扫描输入中的回车符。它也可以与更简单的正则表达式一起使用。

您可能可以将这项工作作为单线工作。例如:

expect -c 'spawn mount /media/SSH-MUSIC
           expect "assword:" {send "password\r\n"}
           interact'

在脚本命令完成后,您需要交互命令将生成的进程的控制权返回给用户。

于 2012-06-11T16:25:10.210 回答
0

您可以尝试 sshpass 实用程序。我认为这比 spawn 预期的要容易。

于 2012-06-11T11:59:18.587 回答
0

我相信您在脚本中省略了行尾字符 (\n),您的第三行应如下所示:

send "password\r\n"
于 2012-06-11T12:54:37.573 回答