pli*_*han 33 ssh shell bash command-line-interface
有没有办法强制 SSH 在远程端使用特定的 shell,而不管用户的默认 shell 是什么?
我尝试过类似的解决方案:
ssh host.domain.com /bin/bash -c 'complicated, multi-line command'
Run Code Online (Sandbox Code Playgroud)
但不幸的是,远程端的默认 shell 负责解析“复杂的多行命令”部分,我很难充分地转义它以供 Bash 和 C shell 用户使用。
Ign*_*ams 17
使用 heredoc:
ssh host.domain.com /bin/bash << EOF
big ugly commands
lots of them
EOF
Run Code Online (Sandbox Code Playgroud)
Fáb*_*tos 15
您可以使用该-t选项为要启动的程序强制分配伪 tty,就好像您正在执行标准 shell。然后将您想要的外壳作为一个普通的旧参数传递。
使用这种技术,您不仅可以使用任何已安装的 shell,还可以通过单个命令打开 vim 和其他需要 TTY 的程序。如果您正在编写一个 shell 脚本,将您登录到某个地方并在 vim 或 htop 或其他东西上打开一个文件,这很酷。
这是 bash
me@my-machine $ ssh root@myhost -t bash
root@myhost:~#
Run Code Online (Sandbox Code Playgroud)
sh也有效。就像其他任何事情一样。
me@my-machine $ ssh root@myhost -t sh
#
Run Code Online (Sandbox Code Playgroud)
不确定这是否是一个登录 shell,但有一些选项可以让 bash 像登录 shell 一样工作,所以你的 shell 可能也有。
sys*_*138 11
我不相信这是可能的,至少对于基于 openssh 的系统是这样。如果您有能力,更好的解决方案可能是 sftp 一个 shell 脚本文件,然后使用您发布的方法执行它。它的优点是可以最大限度地减少所需的转义量,但会留下一个必须删除的文件(也许作为脚本的最后一步)。
Kur*_*fle 10
使用基于密钥的登录,而不是基于密码的登录。然后,您可以将一个(列表)“强制命令”添加到安装在服务器上的公共 ssh 密钥(在SSH1 的情况下在“选项”字段中)(在~/.ssh/authorized_keys文件中用于 SSH1 , ~/.ssh2/ SSH2授权)。
执行强制命令,以便调用所需的 shell...
更多:您最多可以将一个强制命令关联到一个给定的键。如果出于不同目的需要多个强制命令,则必须设置不同的键。(当然,您可以将多个内容放入一个脚本中,您可以通过强制命令调用该脚本。但请注意,如果用户登录,则始终针对给定帐户/密钥运行强制命令,无论他是否要求运行其他内容。如果您仍想遵守要求的原始命令,请查看如何利用该$SSH_ORIGINAL_COMMAND变量...)
通过 Google阅读有关“强制命令”的信息。
| 归档时间: |
|
| 查看次数: |
93858 次 |
| 最近记录: |