7105
自動でtelnetで接続するための下記のスクリプトにおいて  
パスワードの自動入力に失敗する理由を知りたく存じます。

手動で「"magic" + リターンキー」でログインできているのですが、  
スクリプト上で send "magic\r"と記載しているのに、 Incorrect passwordになるのは  
なぜでしょうか。

telnet.sh

```

    #!/usr/bin/expect -f
    set address "192.168.10.1"
    set port "23"
    spawn telnet $address $port
    
    expect "ready" { sleep 5; send "\r"; }
    expect "Password" { sleep 5; send "magic\r"; }
    expect "$" { sleep 5; send "pof1\r"; }
    expect "$" { sleep 5; send "exit\r"; }
    expect eof
    
```

期待する結果（手動で、パスワードを「magic」と入力）

```

    spawn telnet 192.168.10.1 23
    Trying 192.168.10.1... 
    Connected to 192.168.10.1.
    Escape character is '^]'.
    220 (Noname) server ready.
    
    Password:
    OK
    Noname> pof1 220 192.168.10.1 Command OK.
    Noname> exit 221 Goodbye.
    Connection closed by foreign host.
    
```

実行結果

```

    $ ./PWON1.sh
    Trying 192.168.10.1...
    Connected to 192.168.10.1.
    Escape character is '^]'.
    220  (Noname) server ready.
    Password:
    Incorrect password
    Incorrect password
    
```

\rを\nに変えたところ

```

    hoge$ sudo ./telnet.sh
    spawn telnet 192.168.10.1 23
    Trying 192.168.10.1...
    Connected to 192.168.10.1.
    Escape character is '^]'.
    220 A (Noname) server ready.
    hoge$
    
```

ここで終わりました。
CC BY-SA 3.0
2015-02-25T20:36:57.600
7097
2015-02-27T08:12:30.823
2015-02-26T02:31:05.507
3639
7590
question
bash expect
telnetのパスワードの入力の自動化について
`expect`で期待する文字がログイン時に出ていないと思います。  
これで動きませんか？

```

    #!/usr/bin/expect -f
    set address "192.168.10.1"
    set port "23"
    spawn telnet $address $port
    
    expect "ready" {
        sleep 5
        send "\r"
    }
    expect "Password" {
        sleep 5
        send "magic\r"
    }
    expect "OK" {
        send "sleep 5\r"
        send "pof1\r"
        send "sleep 5\r"
        send "exit\r"
    }
    expect eof
    
```

それとファイルの改行コードは`LF(\n)`だけになっていますか？  
`CRLF(\r\n)`ではLinux上で実行できません。
CC BY-SA 3.0
2015-02-26T02:27:42.803
7105
2015-02-26T06:28:26.843
2015-02-26T06:28:26.843
7214
7214
7097
answer
1. "ready"に対して"\r"は必要ですか？ 必要なければ、これもパスワードとして送られてしまうため、ログインできないのかなと思いました。
  2. Ubuntu 14.04でtelnetログイン環境を作って擬似的にテストしたところ、「expect "$"」はうまく動かず、「expect $」か「expect "$ "」（$の後ろにスペース）か「expect "\\$"」とすると動作しました。
  3. 上記テスト環境では、パスワードの末尾などは「\r」も「\n」でもどちらでも動作しました。（ネットで検索してみると、どっちのパターンも出てきますが「\n」の方が多いようです。）
CC BY-SA 3.0
2015-02-27T07:14:58.403
7208
2015-02-27T08:12:30.823
2015-02-27T08:12:30.823
7900
7900
7097
answer