Я пытаюсь использовать ssh для удаленного запуска xterm, который запускает команду в неинтерактивной среде входа в систему с файлом, который устанавливает среду в нестандартном месте. Кто-нибудь знает как?
1 ответ
Есть некоторые недостающие детали. Но (в зависимости от разновидности ssh-клиента и удаленной системы) вы обычно используете опцию -X
или -Y
чтобы получить X-forwarding. Последний предпочитается некоторыми, но не обязательно универсально доступным. X11Forwarding (или ForwardX11) может быть запрещен демоном sshd
удаленного хоста. Смотрите руководство ssh
для некоторого обсуждения.
Учитывая это, звучит так, как будто вы имеете в виду что-то вроде
ssh -X remotehost xterm -e myshellcommand
Как и опция -e
xterm, ssh передает оставшуюся часть строки удаленному хосту в виде команды. Итак, есть два уровня для работы:
- "xterm -e myshellcommand"
- "Myshellcommand"
xterm использует вызовы execv
вместо system
, поэтому он может принимать (должным образом экранированный или заключенный в кавычки) разделители оболочки, такие как точка с запятой, не предполагая, что значение параметра для -e
заключено в кавычки как один токен.
Точка с запятой разделяет команды в оболочке. Например, вы можете сделать что-то вроде этого:
ssh -X remotehost xterm -e ". extraenvironment; cd anotherdirectory; myshellcommand"
Возможно, вам придется избежать точек с запятой, чтобы они проходили через различные уровни, например,
ssh -X remotehost xterm -e '. extraenvironment\; cd anotherdirectory\; myshellcommand'
Например, при быстрой проверке "здесь" я обнаружил, что необходимо также избегать пропусков. Вероятно, вам придется поэкспериментировать с вашей конфигурацией, чтобы определить, что работает с вашей оболочкой (как локальной, так и удаленной).