2016-08-30 120 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] ~]$ 

我使用-tt開關,我居然也得到了TTY錯誤 我也試圖殺死PID但這並不工作要麼。 進展腳本的唯一方法是讓我'ctrl c'退出遠程會話。

我已經嘗試在一行上運行ssh,但是這沒有奏效,可能是由於sudo,我不確定。

任何建議將是偉大的。

謝謝

回答

1

用「su」命令打開新的bash會話。如果你只寫一個「退出」,你只完成foo用戶的會話。爲了完成通過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 須藤蘇 - 富 /apps/scripts/copy_files.sh 出口 出口 退出 EOF + RM /應用/腳本/ files2copy +出口0 你在/ var/spool/mail/ams中有新郵件 [foo @ host〜] $被信號2殺死。 – user3615267

+0

因此,它與運行腳本以及完成所需時間有關。如果腳本不需要運行,那麼出口完美工作--- [user @ host1〜] $ [foo @ host1〜] $ [foo @ host1〜] $ [user @ host1〜] $連接到host1.digital.domain .com關閉。但是,如果需要腳本,那麼會話保持打開狀態。 [foo @ host2〜]所以我需要在運行腳本和退出命令之間制定一個延遲 – user3615267

+0

您可以使用「sleep」延遲運行腳本和退出命令之間的延遲。您也可以使用「等待」等待一個過程完成。 也許你可以在其他bash會話中使用「setsid」運行腳本,或者在退出時不要發送SIGHUP信號。 – fbohorquez