我正在通过跳线盒访问远程主机。如果通过 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。
参考: