6

目前我有一个 bash 脚本,它在通过 ssh 做一些事情时在其中使用期望。看起来像:

#!/bin/bash
#some bash stuff here
...
/usr/bin/expect -c '
    spawn somescript.sh
    expect "password:"
    send "$PASSWD"
'
...

somescript.sh 通过 ssh 对远程服务器执行命令,但现在我的登录需要更改密码。我试过了

/usr/bin/expect -c '
    spawn somescript.sh
    expect "password:"
    send "$PASSWD"
    expect "current password"
    send "$PASSWD"
    expect "new password"
    send "$NEWPASSWD"
'

但我收到一条错误消息:

WARNING: Your password has expired.\n Password change required but 
no TTY available.
4

3 回答 3

3

因此,somescript.sh建立ssh连接,然后您会收到有关 TTY 不可用的错误消息。

试试-t选项!

ssh 手册页

-t   Force pseudo-tty allocation.  This can be used to execute arbi-
     trary screen-based programs on a remote machine, which can be
     very useful, e.g., when implementing menu services.  Multiple -t
     options force tty allocation, even if ssh has no local tty.
于 2013-08-23T01:13:49.300 回答
-1

这可以通过使用ssh(即不在脚本中)直接连接到盒子来解决。

这样做,它会提示您更改密码。这样做,错误就会消失。

于 2014-12-04T19:48:34.060 回答
-2

看起来您正在尝试运行ssh user@server passwd,但由于您的密码已过期,您必须先更改它。可能当您运行 expect 因为spawn user@server它会要求您更改密码并且它会起作用。

于 2016-05-19T12:58:58.460 回答