スクリプトのネストされたssh接続内でインタラクティブシェルを実行する

マイケル

マシンAを介してマシンBに接続したいとします。私が学んだように、これを実現する方法は複数あります。たとえば、

ssh -T -J user@machineA user@machineB << END_OF_SSH_CONNECTION
  # Some commands in machine B
END_OF_SSH_CONNECTION

または

ssh -T user@machineA << END_OF_MACHINE_A
  ssh -T machine B << END_OF_MACHINE_B
    # Some commands in machine B
  END_OF_MACHINE_B
END_OF_MACHINE_A

ただし、ユーザーがマシンBに接続しているときにコマンドを入力できるインタラクティブシェルを開始する方法は私にはわかりません。たとえば、これは機能します。

ssh user@machineA -t 'bash -l -c "bash"'

そしてこれも同様に機能します:

ssh -J user@machineA user@machineB -t 'bash -l -c "bash"'

ただし、以下は機能しません。

ssh -J user@machineA user@machineB -t 'sudo apt-get update; bash -l -c "bash"'
E: Command line option 'l' [from -l] is not understood in combination with the other options.
Connection to machineB closed.

そして、次のどちらでもありません。

ssh -J user@machineA user@machineB -t 'if [ 1 -eq 1 ]; then bash -l -c "bash"; fi'
/usr/local/sbin/start_ttylog.sh: line 67: exec: if: not found
Connection to machineB closed.

私もこれを試しました:

ssh -T -J user@machineA user@machineB << EOF

  # Some commands on machineB

  # Check whether apache2 has been correctly installed
  if [ $(dpkg-query -W -f='${Status}' apache2 2>/dev/null | grep -c "ok installed") -eq 1 ];
  then
    printf "done\n";
  else
    printf "fail\nStarting an interactive shell: enter exit to quit\n";
    bash -l -c "bash";
  fi
EOF

この最後のバージョンはほぼ機能します(つまり、エラーは返されません)が、ユーザーが期待どおりにコマンドを入力できる対話型シェルは起動しません。

誰かが私を助けてくれることを願っています。前もって感謝します。

マイケル

助けてくれてありがとう、@ attie。提案されたコードを少し変更しました。これを以下に報告します

#!/usr/bin/env bash

ssh -T -J user@machineA user@machineB 'cat >/tmp/myscript' <<"EOF"
if dpkg-query -W -f='${Status}' apache2 2>/dev/null | grep -q 'ok installed'; then
  echo "done";
else
  echo "fail, starting an interactive shell";
  bash -l -c "bash";
fi
EOF

ssh -t -J user@machineA user@machineB "bash '/tmp/myscript'"

これに、外部ファイルに書き込む必要さえありません。

#!/usr/bin/env bash

ssh -T -J user@machineA user@machineB << "EOF"
if dpkg-query -W -f='${Status}' apache2 2>/dev/null | grep -q "ok installed"; then
  echo "done";
else
  echo "fail, starting an interactive shell";
  bash -l -c "bash";
fi
EOF

私は基本的に、EOFフィールドを拡張する試みを回避するために使用される、周りの引用符を見逃していました${Status}

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

シェルスクリプトがインタラクティブに実行されているかどうかを判断するのに混乱している

分類Dev

スクリプト内でインタラクティブのシェル履歴拡張を使用する

分類Dev

非インタラクティブシェルでスクリプトを実行しますか?

分類Dev

「インタラクティブシェル」モードのPHPがこのスクリプトを1回だけ実行するのはなぜですか?

分類Dev

Angularでは、ui-sortableを使用してテンプレートをコンパイルし、接続されたリストで2回実行するディレクティブは、両方のリスト間でドラッグアンドドロップできません

分類Dev

ネストされたコレクション内のオブジェクトプロパティを、C#ドライバーを使用してMongoDB内のこのオブジェクトの別のプロパティで更新する

分類Dev

SSHインスタンスが閉じた場合でも、sshで実行されているシェルスクリプトを実行し続けることはできますか?

分類Dev

Centosのyumを介してすべてのインタラクティブシェルで提供されたスクリプトをインストールおよびアンインストールする方法は?

分類Dev

AWS エラスティック Beanstalk 環境インスタンスの起動でシェル スクリプトを実行する方法

分類Dev

シェルスクリプトの実行:インタラクティブに入力したかのようにコマンドを出力に含める方法

分類Dev

Maven Javaプロジェクトで実行時にアクティブ化されたプロファイル名のリストを取得する

分類Dev

JsViewsは、ルートオブジェクトとそのネストされたプロパティでデータバインディングを実行する方法を教えてください。

分類Dev

リモートホスト上のdockerコンテナ内でansibleタスクを実行するために接続する方法(ssh経由)

分類Dev

出力をリダイレクトすると、PythonプログラムがDockerコンテナのシェルスクリプトで実行されません

分類Dev

バックグラウンドでPythonスクリプトを実行した後、インタラクティブなPythonシェルを開く

分類Dev

vimスクリプト内で実行されたシェルコマンドの出力をファイルにリダイレクトできますか?

分類Dev

Javaランタイムを使用してインタラクティブシェルスクリプトを実行する方法

分類Dev

最小限のダウンタイムで実行中にデプロイされた流星アプリを更新する-ベストプラクティス

分類Dev

ストライプ:サブスクリプションで接続されたアカウントを設定する際の問題

分類Dev

タイプスクリプトでネストされたオブジェクトを初期化するための「デフォルトオブジェクト」?

分類Dev

インターフェイスが接続されたときにカスタムスクリプトを実行する

分類Dev

Jenkinsパイプラインのシェルスクリプトを介してansibleプレイブックを実行すると、エコー出力がバッファリングされ、リアルタイムで表示されません

分類Dev

Jenkinsパイプラインステップ内でシェルスクリプトを実行するという点で、 "" "と '' 'の違いは何ですか?

分類Dev

方法でビルドが型ヒントプロパティでネストされたオブジェクトをデシリアライズするためにどこにあるのでしょうか?

分類Dev

ネストされたオブジェクトを配列内の次のオブジェクトにプッシュする[機能スタイル]

分類Dev

Gatsby.js:ネストされたオブジェクトプロパティでGraphQLクエリをフィルタリングする

分類Dev

ListViewReactネイティブでネストされた配列オブジェクトをループする

分類Dev

ネイティブハンドルのネストされたオブジェクトをマップとディスプレイで反応させる

分類Dev

実行は、タスクに失敗しました「:アプリ:compileDebugJavaWithJavac」。ネイティブプロジェクトを反応させるの実行中

Related 関連記事

  1. 1

    シェルスクリプトがインタラクティブに実行されているかどうかを判断するのに混乱している

  2. 2

    スクリプト内でインタラクティブのシェル履歴拡張を使用する

  3. 3

    非インタラクティブシェルでスクリプトを実行しますか?

  4. 4

    「インタラクティブシェル」モードのPHPがこのスクリプトを1回だけ実行するのはなぜですか?

  5. 5

    Angularでは、ui-sortableを使用してテンプレートをコンパイルし、接続されたリストで2回実行するディレクティブは、両方のリスト間でドラッグアンドドロップできません

  6. 6

    ネストされたコレクション内のオブジェクトプロパティを、C#ドライバーを使用してMongoDB内のこのオブジェクトの別のプロパティで更新する

  7. 7

    SSHインスタンスが閉じた場合でも、sshで実行されているシェルスクリプトを実行し続けることはできますか?

  8. 8

    Centosのyumを介してすべてのインタラクティブシェルで提供されたスクリプトをインストールおよびアンインストールする方法は?

  9. 9

    AWS エラスティック Beanstalk 環境インスタンスの起動でシェル スクリプトを実行する方法

  10. 10

    シェルスクリプトの実行:インタラクティブに入力したかのようにコマンドを出力に含める方法

  11. 11

    Maven Javaプロジェクトで実行時にアクティブ化されたプロファイル名のリストを取得する

  12. 12

    JsViewsは、ルートオブジェクトとそのネストされたプロパティでデータバインディングを実行する方法を教えてください。

  13. 13

    リモートホスト上のdockerコンテナ内でansibleタスクを実行するために接続する方法(ssh経由)

  14. 14

    出力をリダイレクトすると、PythonプログラムがDockerコンテナのシェルスクリプトで実行されません

  15. 15

    バックグラウンドでPythonスクリプトを実行した後、インタラクティブなPythonシェルを開く

  16. 16

    vimスクリプト内で実行されたシェルコマンドの出力をファイルにリダイレクトできますか?

  17. 17

    Javaランタイムを使用してインタラクティブシェルスクリプトを実行する方法

  18. 18

    最小限のダウンタイムで実行中にデプロイされた流星アプリを更新する-ベストプラクティス

  19. 19

    ストライプ:サブスクリプションで接続されたアカウントを設定する際の問題

  20. 20

    タイプスクリプトでネストされたオブジェクトを初期化するための「デフォルトオブジェクト」?

  21. 21

    インターフェイスが接続されたときにカスタムスクリプトを実行する

  22. 22

    Jenkinsパイプラインのシェルスクリプトを介してansibleプレイブックを実行すると、エコー出力がバッファリングされ、リアルタイムで表示されません

  23. 23

    Jenkinsパイプラインステップ内でシェルスクリプトを実行するという点で、 "" "と '' 'の違いは何ですか?

  24. 24

    方法でビルドが型ヒントプロパティでネストされたオブジェクトをデシリアライズするためにどこにあるのでしょうか?

  25. 25

    ネストされたオブジェクトを配列内の次のオブジェクトにプッシュする[機能スタイル]

  26. 26

    Gatsby.js:ネストされたオブジェクトプロパティでGraphQLクエリをフィルタリングする

  27. 27

    ListViewReactネイティブでネストされた配列オブジェクトをループする

  28. 28

    ネイティブハンドルのネストされたオブジェクトをマップとディスプレイで反応させる

  29. 29

    実行は、タスクに失敗しました「:アプリ:compileDebugJavaWithJavac」。ネイティブプロジェクトを反応させるの実行中

ホットタグ

アーカイブ