首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ssh:强制不同的shell执行非交互式命令。

ssh:强制不同的shell执行非交互式命令。
EN

Unix & Linux用户
提问于 2021-08-24 10:59:21
回答 1查看 1.2K关注 0票数 1

如何在远程服务器上通过ssh强制使用特定的shell执行非交互式命令?

远程服务器上的默认shell是zsh,但我需要使用/bin/sh执行给定的命令。当我运行以下命令时,foo将由zsh执行(如预期的那样):

代码语言:javascript
复制
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吗?

EN

回答 1

Unix & Linux用户

回答已采纳

发布于 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

票数 3
EN
页面原文内容由Unix & Linux提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://unix.stackexchange.com/questions/666049

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档