質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Linux

Linuxは、Unixをベースにして開発されたオペレーティングシステムです。日本では「リナックス」と呼ばれています。 主にWebサーバやDNSサーバ、イントラネットなどのサーバ用OSとして利用されています。 上位500のスーパーコンピュータの90%以上はLinuxを使用しています。 携帯端末用のプラットフォームAndroidは、Linuxカーネル上に構築されています。

シェル

シェル(shell)はUnix や Linux 系のOSで使用されるコマンドインタプリタを指します。

Q&A

解決済

2回答

13012閲覧

linux上のexpectのシェルでexpectを使用した待機で分岐は可能か?

usugita_san

総合スコア221

Linux

Linuxは、Unixをベースにして開発されたオペレーティングシステムです。日本では「リナックス」と呼ばれています。 主にWebサーバやDNSサーバ、イントラネットなどのサーバ用OSとして利用されています。 上位500のスーパーコンピュータの90%以上はLinuxを使用しています。 携帯端末用のプラットフォームAndroidは、Linuxカーネル上に構築されています。

シェル

シェル(shell)はUnix や Linux 系のOSで使用されるコマンドインタプリタを指します。

0グッド

0クリップ

投稿2015/04/02 10:04

こちらのサイトを参考にして、expectのシェルを組んでいます。
http://www.uetyi.mydns.jp/wordpress/command/entry-158.html

何がしたいのかと言うとsftpでファイルをまるごとダウンロードしたいのです。
しかしSFTPで初めてアクセスした時、以下のような確認メッセージが表示されてしまいます。

The authenticity of host '999.999.999.999 (999.999.999.999)' can't be established.
RSA key fingerprint is ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff.
Are you sure you want to continue connecting (yes/no)? yes

作成したスクリプトは、以下のように、単純に命令を投げているだけです。

lang

1spawn sftp $USER@$HOST 2expect password 3send $PASS\n 4expect sftp>

このスクリプトだと、前述のメッセージが表示された時に、いつまでも待機してしまいます。
前述のメッセージが表示された時だけ、yesコマンドを入力できれば解決なのですが、その方法が解りません。

expectを使うのが不適切なのかもしれないと考えているのですが、代案が浮かびません。

皆様ならどのように実現するでしょうか?

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

個人的にお勧めしませんが、以下のように「UserKnownHostsFile=/dev/null」をオプションに付与してみてください。
$ spawn sftp $USER@$HOST -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null

投稿2015/04/03 03:28

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

usugita_san

2015/04/03 05:22

すみません、オプションの指定方法なんですが、-oの後はスペースを空けるのでしょうか? 上記の通りにやると、エラーが出てしまうんです。 こんな感じの奴が・・・。 usage: sftp [-1246Cpqrv] [-B buffer_size] [-b batchfile] [-c cipher] [-D sftp_server_path] [-F ssh_config] [-i identity_file] [-l limit] [-o ssh_option] [-P port] [-R num_requests] [-S program] [-s subsystem | sftp_server] host sftp [user@]host[:file ...] sftp [user@]host[:dir[/]] sftp -b batchfile [user@]host send: spawn id exp4 not open while executing 一応、-oの後をスペースを消してためしてみました。 spawn sftp $USER@$HOST -oStrictHostKeyChecking=no -oUserKnownHostsFile=/dev/null しかし、やはり同じエラーが発生しました。 sshのオプションだという事は分かったのですが、sftp上で指定する方法が解りません。 すみません、教えて頂けないでしょうか。
退会済みユーザー

退会済みユーザー

2015/04/03 06:11

sshではOKなのですが、sftpだと[-o ssh_option] は複数指定することが出来ないようです。 残る手段としては 下記のように 受信側ノードのssh_configまたは、受信ユーザの .ssh/config に上記設定を記載してみてください。 $ cat << EOF > ~/.ssh/config Host 【$HOST】 StrictHostKeyChecking no UserKnownHostsFile=/dev/null EOF $ chmod 600 ~/.ssh/config
usugita_san

2015/04/03 06:38

出来ました!SSHの設定だったのですね。道理でSFTPの事を調べても解らないわけだ・・・。 本当に助かりました。ありがとうございます。
guest

0

① $ sftp --help
と打鍵して、[-o ssh_option] という表示を確認してください。

② 作成したスクリプトを以下のようにしてください。
spawn sftp $USER@$HOST -oStrictHostKeyChecking=no
expect password
send $PASS\n
expect sftp>

投稿2015/04/02 11:57

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

usugita_san

2015/04/03 00:09

sftp --helpを実行してみました。結果は、以下の通りで、「-o ssh_option」という項目が存在しました。 $ sftp --help usage: sftp [-1246Cpqrv] [-B buffer_size] [-b batchfile] [-c cipher] [-D sftp_server_path] [-F ssh_config] [-i identity_file] [-l limit] [-o ssh_option] [-P port] [-R num_requests] [-S program] [-s subsystem | sftp_server] host sftp [user@]host[:file ...] sftp [user@]host[:dir[/]] sftp -b batchfile [user@]host $
usugita_san

2015/04/03 00:17

その後、SFTPのオプションを付け加えて実行してみました。 $sftp user_name@999.999.999.999 -oStrictHostKeyChecking=no しかし、やはり例の確認メッセージは表示されてしまいました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問