為什麼我無法在遠端主機上執行 SSH 命令?

為什麼我無法在遠端主機上執行 SSH 命令?

我正在透過跳線盒存取遠端主機。如果透過 ssh shell 存取遠端主機,我可以輕鬆存取遠端主機:

ssh remoteHost

Last login: Tue Feb 16 12:56:26 2016 from xx.xxx.xx.xx

remoteHost:user:~$ ls

<shows all the stuff>

但是當我嘗試透過 SSH 命令列選項執行命令時,我總是得到:

ssh remoteHost ls

"ls" isn't allowed to be executed.

Killed by signal 1.

我可以成功執行 ssh 指令一些主機,但不是其他人。

這是可以在伺服器上配置的設置,即“允許遠端 ssh 命令”或類似的設置嗎?

FWIW,我確實看過如何在沒有密碼的情況下使用 ssh 在遠端主機上啟用使用指令?,但我很確定我的問題與引用無關,因為該問題的唯一答案似乎表明了這一點。

更新:

在遠端主機上,我有一個authorized_keys2 文件,其中包含如下內容:

ssh-rsa <encrypted stuff> jumpbox_user@jumpbox
ssh-rsa <encrypted stuff> jumpbox_user@mydesktop

我的 ssh/.config 檔案如下所示:

Host remoteHost
  HostName remoteHost
  User user
  ProxyCommand ssh -W %h:%p jumpbox_user@jumpbox_host
  ServerAliveInterval 60

答案1

嘗試使用該-t選項運行您的 ssh 線路,並確保您的遠端命令由 ' 分隔,因為這告訴 ssh 在遠端主機上運行該命令,從而使您的線路更加防錯。

ssh user@remoteHost -t 'ls'

僅供參考: -t 選項啟用偽終端分配,它實際上模擬打開 SSH 終端,然後鍵入命令,然後輸出 STDOUT 並退出 - 這正是您提到的手動執行的操作。

根據 SSH 手冊頁:

-t 強制偽終端分配。這可用於在遠端電腦上執行任意基於螢幕的程序,這非常有用,例如在實現選單服務時。多個 -t 選項強制 tty 分配,即使 ssh 沒有本地 tty。

參考:

SSH 手冊頁

什麼是偽 TTY 分配?

相關內容