代码之家  ›  专栏  ›  技术社区  ›  Malfist

使用expect向ssh传递密码

  •  41
  • Malfist  · 技术社区  · 16 年前

    如何使用expect向ssh连接发送密码。

    说密码是p@sword ssh命令是 抑制性消减杂交me@127.0.0.1

    当它显示密码时,我该怎么办才能让它输入密码

    me@127.0.0.1的密码:
    ?

    使用SSH密钥对的正确操作不是一个选项,因为我必须使用SSH(scp)将密钥放在服务器上,这将要求输入密码。

    6 回复  |  直到 16 年前
        1
  •  79
  •   max    16 年前

    我总是使用“适当”的解决方案,但在其他情况下我使用了expect。

    Here 我发现了以下建议:

    #!/usr/local/bin/expect
    spawn  sftp  -b cmdFile user@yourserver.com
    expect "password:"
    send "shhh!\n";
    interact
    
        2
  •  4
  •   Paul Dixon    16 年前

    使用公钥身份验证和使用没有密码的密钥不是更容易吗?

    当源计算机上的用户执行此操作以生成RSA密钥时

    ssh-keygen -t rsa
    

    现在将~/.ssh/id_rsa.pub复制到目标计算机,并将其附加到目标用户的authorized_keys文件中

        3
  •  4
  •   Community Mohan Dere    8 年前

    你最快的前进方向(除非你想成为一名Tcl专家,这在2009年是……不寻常的……)可能是使用 autoexpect 。这是手册页:

    http://expect.nist.gov/example/autoexpect.man.html

    简而言之,开火 自动期望 ,运行你的ssh会话,完成你需要做的事情,停止自动预期,然后在由此产生的混乱中敲打你的键盘,直到它工作为止:)我假设你只需要一个快速的黑客来整理你的密钥,然后,听起来你已经知道了这一点。

    还有 this question 它已经包含了一个接近你所寻求的示例。

        4
  •  0
  •   Andro Selva Anand Wadhwani    13 年前

    Cygwin的autoexpect不在bin包中。运行setup.exe,搜索expect并选中源复选框。您将在/usr/src中看到生成的树,其中有一个expect/empt/examples目录。里面有一个autoexpect脚本的副本。

        5
  •  0
  •   Mikey B    12 年前

    密钥解决方案将不起作用……因为密钥必须只能由运行ssh的人读取。在xp上,您无法创建具有正确权限的密钥结构。所以ssh不会读取它们。这可能已经改变了,但上次我检查它仍然不起作用。

        6
  •  -2
  •   rmeador    16 年前

    我敢肯定,你不可能做你想做的事情。大多数*nix应用程序都会提示直接从TTY读取密码,而不是从stdin读取密码,所以你不能通过管道输入密码。正如其他人提到的,你可以将SSH配置为不提示密码,如前所述 here .

    在我无缘无故地被否决后,我去做了更多的研究 expect 命令并发现它有 send_tty 发送到/dev/tty而不是stdin的命令,这实际上可能会执行您想要的操作。..我以前不知道这个功能。但是,我仍然建议将密钥放在服务器上。