Ssh
強制 SSH 使用特定的 shell
有什麼方法可以強制 SSH 在遠端端使用特定的 shell,而不管使用者的預設 shell 是什麼?
我嘗試過類似的解決方案:
ssh host.domain.com /bin/bash -c 'complicated, multi-line command'
但不幸的是,遠端端的預設 shell 負責解析“複雜的多行命令”部分,我很難將其轉義為足以為 Bash 和 C shell 使用者工作。
我不相信這是可能的,至少在基於 openssh 的系統中是這樣。如果您有能力,更好的解決方案可能是 sftp 一個 shell-script 文件,然後使用您發布的方法執行它。它的優點是可以最大限度地減少所需的轉義量,但會留下一個必須刪除的文件(可能是腳本的最後一步)。
您可以使用該
-t
選項為要啟動的程序強制分配偽 tty,就好像您正在執行標準 shell 一樣。然後將您想要的 shell 作為普通的舊參數傳遞。使用這種技術,您不僅可以使用任何已安裝的 shell,還可以通過單個命令打開 vim 和其他需要 TTY 的程序。如果您正在編寫一個 shell 腳本,該腳本將您登錄到某個地方並在 vim 或 htop 上打開一個文件,那麼這很酷。
這裡是
bash
me@my-machine $ ssh root@myhost -t bash root@myhost:~#
sh
也可以。就像其他任何事情一樣。me@my-machine $ ssh root@myhost -t sh #
不確定這是否是登錄 shell,但有一些選項可以讓 bash 像登錄 shell 一樣,所以你的 shell 可能也有。