質問: sshおよびポートノッキングを介してログインするためのbash / expectスクリプト。 sshキーは使用できません 私のログインサーバーは、ポートノッキングを使用してエントリを許可するファイアウォールの背後にあります。ログインフローは ポートノッキングコマンドを入力します。これには、外部ipを入力する必要があります。 プロンプトが表示されたら、ポートノッキングパスワードを入力します。 sshコマンドで入力します パスワードを入力してください sshキーの使用許可を得ることができますが、起動するシェルごとにこのフローを実行する必要があるため、ログイン時間を短縮できるスクリプトを作成しようとしています。#!/bin/expect spawn fwknop -a tcp/22 -a `curl http://ipecho.net/plain` -d foo.org -p tcp -p 9999 expect "enter encryption password:" send "pass1\r" spawn ssh -y bar@foo.org expect "bar@foo.org's password:" send "pass2\r" 各コマンドの実行は、コマンドラインから正常に機能します。しかし、最初のスポーンコマンドを実行しようとするとspawn fwknop -a tcp/22 -a `curl http://ipecho.net/plain` -d foo.org -p tcp -p 9999 エラーが発生します:fwknop: fko_set_spa_message: error 10 - invalid allow ip address in the spa message data send: spawn id exp7 not open ただし、同じコマンドをコマンドラインにコピーして貼り付けると、問題なく機能します。
回答: expectの経験はありませんが、itがバックティックを理解しているかどうか疑問に思います。試してみてください#!/bin/sh#または、必要と思われる場合は#!/usr/bin/env bashを指定します。 expect <<- ! spawn fwknop -a tcp/22 -a `curl http://ipecho.net/plain` -d foo.org ... expect "enter encryption password:" send "pass1\r" spawn ssh -y bar@foo.org expect "bar@foo.org's password:" send "pass2\r" !したがって、`curl http://ipecho.net/plain`をシェルで処理することができます。