
我想透過 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
預設分配一個偽終端。這就是你想要的。強制偽終端分配,使用-t
或RequestTTY
.
甚至這個
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"