如何在远程服务器上通过ssh强制使用特定的shell执行非交互式命令?
远程服务器上的默认shell是zsh,但我需要使用/bin/sh执行给定的命令。当我运行以下命令时,foo将由zsh执行(如预期的那样):
ssh -tq -l root -o LogLevel=ERROR remote-server "foo"我已经尝试指定/bin/sh -c "foo",但这只会导致zsh启动/bin/sh,然后执行foo。
我需要直接使用/bin/sh,而不是通过zsh
ssh是否有一些选项,或者本地或远程的一些设置,以便我可以定义不同的shell?
我可以为所有非交互命令(非登录shell)设置不同的shell吗?
发布于 2021-08-24 13:02:45
通过设计,不可能绕过登录外壳。您可以设置shell受限制的SSH帐户(如rsh/rksh/rbash/…中的受限shell )。,或者只允许某些特定协议(如rssh或git- shell )的shell)。客户端不能指定不同的shell。
要在不同的shell中运行代码,必须让登录shell运行该shell并将代码传递给内部shell。这与在perl、python等其他语言中运行解释代码所需的操作没有什么不同。请注意正确引用。如果不需要标准输入,则在标准输入上传递脚本,这样就不需要嵌套引用。
同一帐户的用户数据库中有多个条目是可能的。“相同帐户”意味着相同的用户ID。条目必须有不同的用户名,可以有不同的密码、不同的外壳等。参见你能给一个用户帐户多个密码吗?。请注意,这不是非常健壮,因为有些程序是从用户ID (而不是从$USER环境变量中的用户名进行查找,后者设置为用户登录时选择的名称)。
如果您希望zsh用于交互使用,但是需要一个用于SSH的Bourne风格的shell,那么您可以做我所做的事情:我将登录shell设置为/bin/sh (或拥有POSIX所需的一切),并且我的.profile中有(一些更复杂的版本) export SHELL=/bin/zsh; exec $SHELL。
https://unix.stackexchange.com/questions/666049
复制相似问题