如何使用expect来回复SSH登录提示?

时间:2012-06-11 11:35:09

标签: linux ssh expect

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

我知道您应该使用安全密钥身份验证来执行此操作,但在这种情况下,由于服务器不允许,因此我无需创建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 < / p>

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

4 个答案:

答案 0 :(得分:1)

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

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

  • 在两个系统上创建这些文件后,您需要使用 public 键并将其粘贴到名为$HOME/.ssh/authorized_keys的文件中。这将为远程计算机提供公钥,以便识别您的身份。

一旦完成,您应该能够使用ssh而无需密码,这使得编写使用ssh的脚本变得更加容易。

答案 1 :(得分:0)

您可以尝试使用sshpass实用程序。我认为这比产卵期望的更容易。

答案 2 :(得分:0)

我相信你在脚本中省略了行尾char(\ n),你的第三行应该是这样的:

send "password\r\n"

答案 3 :(得分:0)

期望通常需要“\ r”作为预期输入的行终止符,输出时需要“\ r \ n”。但是,在这种情况下,您不需要在输入中扫描回车符;它可以用更简单的正则表达式工作。

你可以将这项工作作为一个单行。例如:

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

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