![Почему я не могу выполнить команду SSH на удаленном хосте?](https://rvso.com/image/83688/%D0%9F%D0%BE%D1%87%D0%B5%D0%BC%D1%83%20%D1%8F%20%D0%BD%D0%B5%20%D0%BC%D0%BE%D0%B3%D1%83%20%D0%B2%D1%8B%D0%BF%D0%BE%D0%BB%D0%BD%D0%B8%D1%82%D1%8C%20%D0%BA%D0%BE%D0%BC%D0%B0%D0%BD%D0%B4%D1%83%20SSH%20%D0%BD%D0%B0%20%D1%83%D0%B4%D0%B0%D0%BB%D0%B5%D0%BD%D0%BD%D0%BE%D0%BC%20%D1%85%D0%BE%D1%81%D1%82%D0%B5%3F.png)
Я получаю доступ к удаленному хосту через jumpbox. Я могу легко получить доступ к удаленному хосту, если я получу доступ к нему через оболочку ssh:
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» или что-то подобное?
Кстати, я посмотрелКак включить использование команд на удаленном хосте по 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
Попробуйте запустить строку ssh с -t
опцией и убедитесь, что ваша удаленная команда отделена символом ', так как это указывает ssh на необходимость выполнить команду на удаленном хосте, что делает вашу строку гораздо более защищенной от ошибок.
ssh user@remoteHost -t 'ls'
К вашему сведению: опция -t включает псевдотерминальное выделение, которое фактически имитирует открытие терминала SSH, затем ввод команды, затем вывод STDOUT и выход — именно то, что вы сделали вручную, как и упомянули.
Согласно странице руководства SSH:
-t Принудительное выделение псевдотерминала. Это может быть использовано для выполнения произвольных экранных программ на удаленной машине, что может быть очень полезно, например, при реализации служб меню. Несколько опций -t принудительно выделяют tty, даже если у ssh нет локального tty.
Использованная литература: