1. ホーム
  2. linux

[解決済み] BashスクリプトでExpectを使用して、SSHコマンドにパスワードを提供する

2022-05-04 03:23:40

質問

を使おうとしています。 expect を Bash スクリプトで使用して、SSH パスワードを提供しています。パスワードの提供はうまくいくのですが、思うようにSSHセッションにたどり着けません。Bashに直帰してしまいます。

私のスクリプトです。

#!/bin/bash

read -s PWD

/usr/bin/expect <<EOD
spawn ssh -oStrictHostKeyChecking=no -oCheckHostIP=no usr@$myhost.example.com'
expect "password"
send "$PWD\n"
EOD
echo "you're out"

私のスクリプトの出力です。

spawn ssh -oStrictHostKeyChecking=no -oCheckHostIP=no usr@$myhost.example.com
usr@$myhost.example.com's password: you're out

SSHセッションを持ち、それを終了したときだけ、Bashスクリプトに戻りたい。

Bash を使っている理由は、以前 expect は、メニューを使う必要があるからです。接続するユニット/デバイスを選べるんだ。

<サブ SSHキーを使うべきと答えたい人、ご遠慮ください。

解決方法は?

BashとExpectを混在させるのは、期待する効果を得るためには良い方法とは言えません。Expectだけを使うようにします。

#!/usr/bin/expect
eval spawn ssh -oStrictHostKeyChecking=no -oCheckHostIP=no usr@$myhost.example.com

# Use the correct prompt
set prompt ":|#|\\\$"
interact -o -nobuffer -re $prompt return
send "my_password\r"
interact -o -nobuffer -re $prompt return
send "my_command1\r"
interact -o -nobuffer -re $prompt return
send "my_command2\r"
interact

bashのサンプルソリューションが考えられます。

#!/bin/bash
/usr/bin/expect -c 'expect "\n" { eval spawn ssh -oStrictHostKeyChecking=no -oCheckHostIP=no usr@$myhost.example.com; interact }'

を待ちます。 入力 を実行した後、(一旦)対話型セッションに戻ります。