执行远程命令

执行远程命令
  1. 我无法编辑我正在连接的文件系统的 .bashrc

  2. 我必须使用该~/.ssh/config文件

这是我当前的配置:

Host my-ssh
HostName <ip>
User <user>
IdentityFile <file location>
Compression yes
RemoteCommand cd <path to folder>

当我跑步时ssh my-ssh什么也没有发生。连接似乎自动关闭。如果我删除RemoteCommand线路,它就可以毫无问题地连接。

这是服务器配置上的东西吗?它是一个 EC2 实例,CentOS 或 RHEL,bash 是 shell。

答案1

如果指定远程命令,则远程命令退出后 ssh 连接将立即关闭。命令cd几乎会立即退出。

做你想做的事情的常见方法是:

RemoteCommand cd /some/path && bash

(用您想要的 shell 代替“bash”)。此 cd 到该路径,然后在 cd 操作成功时调用子 shell。当子 shell 退出时,ssh 连接将关闭。

您还需要强制 ssh 为会话分配 PTY:

RequestTTY yes

如果不这样做,默认情况下 ssh 将不会请求,并且您将获得一个非交互式 shell 会话。值得注意的是,您不会收到命令提示符。

答案2

如果您有RemoteCommand指定,则与以下内容相同:

ssh user@host <command>

发生的情况是ssh连接到主机,运行命令并退出,并将命令的退出状态返回为 的退出状态ssh

从手册页:

如果指定了 command,则它将在远程主机上执行,而不是在登录 shell 上执行。

因此,您正在登录主机,更改目录,然后ssh退出。我怀疑这就是你想要的。远程命令是非交互式的,即在远程计算机上运行一个特定命令。

答案3

试着跑ssh -t my-ssh。您可能需要强制进行伪终端分配,该分配由 ~/.ssh/config 中的配置省略。

相关内容