В чем разница между запуском команды в оболочке ssh вручную и запуском ssh user @ host ?

Я предполагал, что это то же самое, но это не так.

В моем конкретном случае сценарий сборки работает нормально, когда выполняется как ./build.sh из сеанса ssh на сервере сборки, как это

$ssh user@host
$./build.sh

, но не работает, когда запускается как аргумент ssh, например:

$ssh user@host /home/user/build.sh

или как этот

$ssh user@host ./build.sh

Сам сценарий просто вызывает кучу двоичных файлов, и их сообщения об ошибках не очень полезны для отладки.

Но не должно иметь значения, что находится в сценарии, если среда такая же, верно? Так в чем может быть разница?

Редактировать: Не знаю, имеет ли это значение, но описанное поведение происходит в гостевой системе ArchLinux Virtualbox без среды рабочего стола. Я также попробовал то же самое на виртуальной машине Ubuntu18.04 с окружением рабочего стола, и сценарий работал правильно в обоих случаях.

1
задан 26 February 2019 в 07:26
3 ответа

Думаю, я понял это.

Разница между два случая - интерактивная и неинтерактивная оболочка, которые действительно существенно отличаются друг от друга.

Вместо запуска сценария как $ ssh user @ host ./build.sh работало открытие оболочки входа в систему. сначала вызовом bash -l , например:

$ssh user@host bash -l ./build.sh

Я не знаю, делает ли это среда выполнения такой же, как при запуске скрипта вручную через ssh, но в моем случае это исправило ошибку.

2
ответ дан 3 December 2019 в 18:24

Если вы не укажете программу для запуска, ssh запустит интерактивную оболочку , для которого назначается псевдотерминал.

Если вы укажете команду для запуска, выделение псевдотерминала не произойдет, что приведет к сбою некоторых команд (особенно тех, которые используют переменную TERM, например, curses front -ends).

Вы можете принудительно выделить терминал с помощью переключателя -t , проверьте, решает ли это вашу проблему.

1
ответ дан 3 December 2019 в 18:24

Логика такая:

ssh remote_host предполагает, что ваше имя пользователя на вашем локальном компьютере такое же, как и на удаленном, а если ваше имя пользователя отличается на удаленном компьютере, вам необходимо проанализировать имя удаленного пользователя в формате: ssh username @ remote-host

Нет причин, по которым что-то вроде ssh user @ IP ./exe.sh не работает, если сам сценарий, разрешения и путь правильные.

0
ответ дан 3 December 2019 в 18:24

Теги

Похожие вопросы