如何在 ssh 連線後執行命令而不斷開連線?

如何在 ssh 連線後執行命令而不斷開連線?

我想透過 ssh 連接到另一台機器後自動執行命令,而不自動關閉 ssh 會話。

在搜尋網路後,我找到了一些解決方案,但沒有一個能按照我需要的方式運作。

ssh bla@bla "ls"

這將在遠端電腦上運行ls命令,顯示輸出並關閉連線。

我還嘗試使用編輯 ssh 配置文件

Host bla
        HostName bla
        User bla
        IdentityFile ~/.ssh/key
        RemoteCommand ls
        RequestTTY force 

同樣的問題,透過 ssh 連接,運行ls命令,顯示輸出,然後退出。甚至這個RequestTTY選項也沒有幫助。

ssh bla@bla "ls ; bash"

運行後不會斷開連接ls,但我沒有得到完整的終端界面,只有一些不顯示me@machine:~$ thing.

我真正想要的:

要么是一些 bash 別名,要么.ssh/config是允許我輸入一個簡單命令的條目,該命令將連接到遠端計算機,然後在那裡運行命令並使終端保持打開狀態。基本上就像我用手做的一樣:

類型

ssh blah@blah

然後連接後我會輸入

ls

答案1

ssh bla@bla "ls ; bash"

運行後不會斷開連接ls,但我沒有得到完整的終端介面,只有一些沒有顯示內容的簡單命令行me@machine:~$

如果您指定命令(例如ls ; bash上面的命令),SSH 伺服器將不會提供偽終端。你已經觀察到了這一點。

另一方面,solessh bla@bla預設分配一個偽終端。這就是你想要的。強制偽終端分配,使用-tRequestTTY.

甚至這個RequestTTY選項也沒有幫助。

如果只是遠端命令,那對你沒有幫助ls。你需要ls; bash或類似的。

看來當您請求 tty 時,您沒有請求bash。當您bash在 之後請求時ls,您沒有請求 tty。你需要兩者:

ssh -t bla@bla "ls; bash"

注意ls也會使用偽終端。請閱讀“更廣泛的圖片”部分我的這個答案了解其中的差異(尤其是「有一個怪癖」的地方)。

答案2

要擺脫 me@machine,您需要設定 PS1 環境變數。嘗試:

ssh bla@bla "PS1=\"\"; ls; bash"

相關內容