2016-08-30 40 views
2

ウェブ上で同様の質問がありましたが、新鮮なリクエストによって回答が明らかになると思われる回答はありません。 リモートコマンドを実行した後でsshセッションが終了しない

は、私は、リモートサーバーに接続を維持された問題を行うことができますLinuxボックス上のリモートクエリを実行しようとしています。

私はスクリプトに-xを設定しているので、出力を見ています。ウィンドウはその後、私の代わりに出て行くのリモートコンピュータ上のプロンプトを与えるしかし、私のスクリプトの 一部はスクリプトがある

ssh -tt $host.digital.domain.com << EOF 
sudo su - foo 
/apps/scripts/bar.sh 
exit 
EOF 

を下回っていることは正しく

[[email protected] ~]$ [[email protected] ~]$ + rm -f '/tmp/files*' 

を実行します。

[[email protected] ~]$ 

私はまた、いずれかのpidが、このdoesntの仕事を殺すためにしようとしたのttyエラー を得ていたように私は-ttスイッチを使用。 スクリプトを進める唯一の方法は、私が 'ctrl c'を使ってリモートセッションを終了することです。

私はおそらくsudoのために、私はわからないんだけど、1本のライン上のsshそれをすべて実行しているが、このdidntの仕事をしようとしています。

アドバイスは素晴らしいでしょう。

ありがとう

答えて

1

「su」コマンドを使用すると、新しいbashセッションが開きます。 1つの "exit"だけを書く場合、あなたはfoo userのセッションを終了します。 ssh接続でセッションを終了するには、他の「終了」を記述する必要があります。

ssh -tt $host.digital.domain.com << EOF 
sudo su - foo 
/apps/scripts/bar.sh 
exit #Exit foo session 
exit #Exit ssh session 
EOF 

出力:

[email protected]$ sudo su - foo 
[email protected]$ /apps/scripts/bar.sh 
[email protected]$ exit #Exit foo session 
exit 
[email protected]$ exit #Exit ssh session 
logout 
Connection to $host.digital.domain.com closed. 
+0

fbohorquezこんにちは、私はそのまだセッションを保持、これを試してみました。 SSH -tt $ host.digital.domain.com << EOF 須藤秀 - fooの /apps/scripts/copy_files.sh 終了 終了 終了 EOF + RM /アプリケーション/スクリプト/ files2copy +終了0 ます/ var/spool/mail/amsに新しいメールがあります。 [foo @ host〜] $ 2で殺されました。 – user3615267

+0

これはスクリプトの実行と完了までの時間と関係があります。スクリプトを実行する必要がない場合、exitは完全に動作します。[user @ host1〜] $ [foo @ host1〜] $ [foo @ host1〜] $ [user @ host1〜] $ host1.digital.domainへの接続.comは閉じた。しかし、スクリプトが必要な場合、セッションは開いたままです。 [foo @ host2〜]だから私はスクリプトと終了コマンドを実行する間に遅延を働かせる必要があります – user3615267

+0

スクリプトを実行して終了コマンド間の遅延のために "スリープ"を使用することができます。また、プロセスが終了するのを待つために「待機」を使用することもできます。 他のbashセッションで実行スクリプトに "setsid"を使用したり、終了時にSIGHUPシグナルを送信しないように "nohup"を使用できます。 – fbohorquez

関連する問題