Ssh

強制 SSH 使用特定的 shell

  • April 5, 2020

有什麼方法可以強制 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 可能也有。

引用自:https://serverfault.com/questions/162018