2013-08-22 110 views
4

目前我有一個bash腳本,它在使用expect期間通過ssh執行某些操作。它看起來像:期望通過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. 

回答

2

所以,somescript.sh使一個ssh連接,然後你會得到有關不使用TTY錯誤。

嘗試-t選項!

ssh man page

-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. 
+0

我試過了-t選項,但是錯誤仍然存​​在 – dwu

0

這可以通過直接連接到使用ssh箱(即不是在腳本中)來解決。

這樣做,它會提示您更改密碼。這樣做,錯誤將消失。

+0

這個線程是關於使用期望的自動化。你的回答沒有幫助。 -1 –

+0

@JasonLeMonier - 問題是關於爲什麼期望失敗,這聽起來像他認爲這可能是與期望做 - 這不是......這是因爲他的密碼需要改變,並且簡單的方法來解決這個問題通常使用ssh進行連接。 –