透過 ssh 登入遠端伺服器時如何更改目錄並設定 bash 選項

透過 ssh 登入遠端伺服器時如何更改目錄並設定 bash 選項

我經常需要透過 SSH 登入遠端主機,我喜歡使用 bash 選項set -o vi,而且通常必須cd登入特定目錄。由於這些主機是短暫的(它們定期建立和銷毀),我無法登入它們並將它們保存在 /.bash_profile.bashrc。因此,我正在研究如何在透過 SSH 連線時執行此操作,這樣我就不必每次連接到遠端伺服器時都鍵入相同的命令。我嘗試了多種方法來實現這一目標,但似乎都不起作用。有人可以幫我正確執行這個指令嗎?簡而言之,這就是我想做的事。

  1. cd到特定目錄
  2. 設定 bash 選項set -o vi

我嘗試這樣做的方法如下:

ssh [email protected] -t "cd /data; exec bash --login -c \"set -o vi\""

我覺得這確實有效,但 SSH 會話會終止,因為一旦set -o vi執行命令,會話就會斷開連接,並顯示以下訊息:

與 remotehost.com 的共享連線已關閉。

有沒有辦法在執行這些命令後保持會話打開,或者是否有其他方法來實現我想要的?

答案1

一些選項:

ssh -t [email protected] 'cd /data && exec bash --login -o vi'

(它適用於所有類似 POSIX 的 shell,包括ksh/ zsh/ dash... 作為-oPOSIX 實用程式的標準選項sh,並且vi恰好是標準選項之一。該命令列還與所有主要 shell 系列的 shell 相容,包括 Bourne, csh、 rc、fish 因此無論root 使用者的登入shell 是什麼,都應該可以工作)

或者:

ssh-t[電子郵件受保護]'cd /data && exec env SHELLOPTS=vi bash --login'

實際上,您不想使用第二個。這意味著該$SHELLOPTS變數將位於環境中並影響所有bash調用(非互動式呼叫將從互動式 shell 繼承調用,從而導致各種問題)。

另請注意,它bash有兩組選項,一組使用-o/設置$SHELLOPTS,一組使用-O/設置$BASHOPTS)。

答案2

將其設為兩個命令。

  1. 將要在遠端主機上執行的命令放入檔案中.bashrc.tmp
  2. $ scp .bashrc.tmp [email protected]:
  3. $ ssh <options> [email protected] "bash --login --rcfile ${HOME}/.bashrc.tmp"

這樣您甚至不需要備份原始的.bashrc.

答案3

為了簡化從主機上的一個資料夾到另一個資料夾的跳轉,您可以安裝apparix並在需要跳轉的不同位置設定書籤,然後to folderX在apparix中使用:https://micans.org/apparix/man/apparix.html

答案4

我使用的是具有共享用戶 ID 的遠端系統,因此我不想編輯啟動文件,因為它也會影響其他人。不過,您在這裡的帖子向我展示瞭如何設定vi我想要的選項。這是我放入~/.ssh/config文件中的內容

Host testsystem
User tester
RequestTTY yes
RemoteCommand exec /bin/bash --login -o vi

這非常簡單。不知道你想要的「cd」部分。

相關內容