SSHがこれらのコマンドの最後でハングするのはなぜですか、どうすれば終了できますか?


10

私はこれを実行します:

ssh -t -vvv -i ~/.ssh/druid-keypair -o StrictHostKeyChecking=no ubuntu@${INSTANCE_ADDRESS} <<EOI

# Setup Oracle Java
...

# Install dependencies - mysql must be built from source, as the 12.04 apt-get hangs
export DEBIAN_FRONTEND=noninteractive
sudo debconf-set-selections <<< 'mysql-server-5.5 mysql-server/root_password password diurd'
sudo debconf-set-selections <<< 'mysql-server-5.5 mysql-server/root_password_again password diurd'
sudo apt-get -q -y -V --force-yes --reinstall install mysql-server-5.5

echo "ALL DONE with druid environment setup!"
exit
EOI

注:私はsshで-tを付けて、または付けずに試してみました。

-vvvからのデバッグ出力は次のとおりです。

...
ldconfig deferred processing now taking place
ALL DONE with druid environment setup!
debug1: client_input_channel_req: channel 0 rtype exit-status reply 0

そして、プロセスはそこに永遠にとどまります。sshコマンドが終了しないのはなぜですか?私は-tを使用して、使用せずに、出口を使用して、使用せずに試しました。違いはありません:(

更新:スクリプトの最後に「jobs」と入力すると、次のように表示されます。

JOBS:
[1]-  Running                 nohup bin/zookeeper-server-start.sh config/zookeeper.properties 2>&1 > /dev/null &
[2]+  Running                 nohup bin/kafka-server-start.sh config/server.properties 2>&1 > /dev/null &

これらのサービスを実行しても、sshセッションを終了するにはどうすればよいですか?

更新:これらのプロセスを手動で否認しました。事はまだ存在しません。WTFの仲間?

更新:行ごとに実行すると、2つのコマンドがCRを押さないとシェルに戻りません。

nohup bin/zookeeper-server-start.sh config/zookeeper.properties &
nohup bin/kafka-server-start.sh config/server.properties &

-vvv(詳細モード)の代わりに-q(クワイエットモード)を使用してみてください。
2013

無効。-vvvはデバッグ用でした。
rjurney 2013

サーバーにSSHで接続し、これらすべてのコマンドを1つずつ実行して、ハングの理由を特定します。
2013

1
それは事です-それらのどれもハングしません!これはコンソールで正常に動作します。
rjurney 2013

<< EOIブロックの内容を「echo 1」のようなものに置き換えれば機能しますか?
ed。

回答:


22

通常、バックグラウンド接続がまだ開いている場合、SSHターミナルセッションはハングします。バックグラウンド接続とは、次のようなことを意味します。

  • X11ウィンドウ転送
  • STDOUTおよびSTDERR

~#ハングしたSSHターミナルに入力して、ハングしたSSHセッションでまだアクティブな接続を確認します。

スクリプトが、気づかなかったセッションを開いている可能性があります。または、リモートマシンの.profile(またはなどの)端末設定に.bashrc、セッションを確立する何かが含まれている可能性があります。頑張ってハンティング!

ちなみに、OpenSSHクライアントが提供するその他のエスケープシーケンスの一部も役立つ場合があります。

Supported escape sequences:
  ~.  - terminate connection (and any multiplexed sessions)
  ~B  - send a BREAK to the remote system
  ~C  - open a command line
  ~R  - Request rekey (SSH protocol 2 only)
  ~^Z - suspend ssh
  ~#  - list forwarded connections
  ~&  - background ssh (when waiting for connections to terminate)
  ~?  - this message
  ~~  - send the escape character by typing it twice
(Note that escapes are only recognized immediately after newline.)

もう1つ、SSHでコマンドを実行してすぐに終了する場合、つまり、リモートターミナルセッションを使用しない場合は、-fオプションをに使用できますssh。これにより、SSH接続がバックグラウンドジョブになります。


3
次の接続が開いています。#0 client-session(t4 r0 i0 / 0 o0 / 0 fd 5/6 cc -1)これは私が得たものです。これはどういう意味ですか?
moleculezz

-f私のために働く。
Jingguo Yao

同じ目的で-nについて聞いたことがありますが、それでもうまくいきませんでした。
Kostas

バックグラウンドプロセスはとしてカウントされますが、ssh接続がハングしないように、バックグラウンドプロセスをbackground connection1つにdisownできますか?
the_prole
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.