【问题标题】:SSH then change ShellSSH 然后更改 Shell
【发布时间】:2014-09-19 13:02:38
【问题描述】:

可能是一个非常简单的问题,但我想知道是否有人可以提供一些建议。

为了完成重复的任务,我经常使用系统管理员提供给我们的凭据登录到远程 Solaris 服务器。但是,每次登录时,我都必须更改 shell(从 csh -> bash),因为特定任务必须使用 BASH 运行。

虽然这样做不是什么大问题,但我发现更改为 bash shell 有点乏味,因为我必须每天重复此任务几次,并且有时可能会忘记在运行任务之前更改 shell 等(我也是也更喜欢 BASH)。

有没有一种方法可以让我在一行中使用 ssh 和更改默认 shell,以便我可以立即在远程服务器上使用我想要的脚本?请注意,我不会更改任何登录文件(如 .login 或 .cshrc),因为远程服务器和凭据不是专门为我共享的。我也不想更改服务器上的默认 shell,因为服务器和凭据被多个人使用。

有人知道如何解决这样的问题吗?任何建议将不胜感激。

【问题讨论】:

标签: bash login ssh solaris csh


【解决方案1】:

SSH 通常会执行您将其作为参数传递的命令,然后断开连接。您需要设置三个选项才能使交互式会话正常工作:

  • ssh -t 将强制分配必要的伪 tty,以便您与要求 SSH 运行的远程命令进行交互
  • bash -l 将启动一个交互式登录 shell
  • csh -l -c会在csh中启动一个交互式登录shell,然后执行后面的命令

要启动一个不同的 shell(即,您的默认值是 csh,而您想启动 bash):

ssh -t <user>@<server> "bash -l"

首先要拾取 csh 环境,我们启动交互式 shell,然后传递命令切换到 bash:

ssh -t <user>@<server> 'csh -l -c "bash"'

【讨论】:

  • 嗨,乞丐,抱歉回复晚了,也只是想说“非常感谢”。似乎环境变量由于某种原因发生了一些变化(在“set”命令之后显示的变量),但它非常接近我想要的。再次,非常感谢!
  • 原始响应没有获取您的 csh 环境 - 我忽略了该要求。更新后的响应应该可以解决这个问题。
  • 您好,感谢您的回答。你知道我怎样才能把它放到特定主机上的 ssh_config 中吗?
  • @cjohansson,我相信您在 ssh_config 中寻找的是 RemoteCommand 选项。
  • @JFlo,加上 RequestTTY 选项(-t 开关)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-10-06
  • 2018-08-30
  • 2017-06-14
  • 1970-01-01
  • 1970-01-01
  • 2018-09-08
  • 1970-01-01
相关资源
最近更新 更多