2014-10-21 23 views
1

В последнее время я пытаюсь запустить команду ssh оболочки из ноутбука Mathematica. Я попробовал несколько предложенных методов без положительного результата. Мой поиск в ответ привел меня к следующему результату:Запуск команды ssh внутри Mathematica

RunProcess[$SystemShell, All, " ssh <login>@<server> exit "]

, но это дает следующее сообщение об ошибке

<|"ExitCode" -> 127, "StandardOutput" -> "", "StandardError" -> "ssh: /usr/local/Wolfram/Mathematica/10.0/SystemFiles/Libraries/\ Linux-x86-64/libcrypto.so.1.0.0: no version information available \ (required by ssh) ssh: /usr/local/Wolfram/Mathematica/10.0/SystemFiles/Libraries/\ Linux-x86-64/libcrypto.so.1.0.0: no version information available \ (required by ssh) ssh: relocation error: ssh: symbol EVP_aes_128_ctr, version \ OPENSSL_1.0.1 not defined in file libcrypto.so.1.0.0 with link time \ reference "|>

у вас есть идеи, как это исправить?

P.S. Моя общая цель - импортировать и экспортировать данные между внешним сервером и ноутбуком Mathematica.

ответ

0

Предложение Łukasz Gładczuk должно работать, но есть лучший способ выполнить это.

RunProcess предоставляет параметр ProcessEnvironment, который позволяет вам устанавливать переменные среды для вашего процесса. Значением по умолчанию является Inherited, что означает, что переменные окружения наследуются от Wolfram Language, что вызывает проблемы с библиотекой.

Run echo $PATH в терминале, чтобы найти свой путь, а затем использовать:

RunProcess[{"ssh", "[email protected]"}, ProcessEnvironment -> <|"PATH" -> yourpath|>] 

где yourpath это ваш путь, как строка.

1

Я обнаружил, что Mathematica заставляет библиотеки зависимости. Если я использую/USR/BIN/команды LDD SSH в терминале я получаю следующий вывод:

linux-vdso.so.1 => (0x00007fffb31fe000) libselinux.so.1 => /lib/x86_64-linux-gnu/libselinux.so.1 (0x00007f2a309a7000) libcrypto.so.1.0.0 => /lib/x86_64-linux-gnu/libcrypto.so.1.0.0 (0x00007f2a305cd000) libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007f2a303c8000) libz.so.1 => /lib/x86_64-linux-gnu/libz.so.1 (0x00007f2a301af000) libresolv.so.2 => /lib/x86_64-linux-gnu/libresolv.so.2 (0x00007f2a2ff94000) libgssapi_krb5.so.2 => /usr/lib/x86_64-linux-gnu/libgssapi_krb5.so.2 (0x00007f2a2fd4d000) libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f2a2f987000) libpcre.so.3 => /lib/x86_64-linux-gnu/libpcre.so.3 (0x00007f2a2f749000) /lib64/ld-linux-x86-64.so.2 (0x00007f2a30e87000) libkrb5.so.3 => /usr/lib/x86_64-linux-gnu/libkrb5.so.3 (0x00007f2a2f47d000) libk5crypto.so.3 => /usr/lib/x86_64-linux-gnu/libk5crypto.so.3 (0x00007f2a2f24e000) libcom_err.so.2 => /lib/x86_64-linux-gnu/libcom_err.so.2 (0x00007f2a2f04a000) libkrb5support.so.0 => /usr/lib/x86_64-linux-gnu/libkrb5support.so.0 (0x00007f2a2ee3e000) libkeyutils.so.1 => /lib/x86_64-linux-gnu/libkeyutils.so.1 (0x00007f2a2ec3a000) libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007f2a2ea1b000)

но делать то же самое в Mathematica:

RunProcess[$SystemShell, All, " ldd /usr/bin/ssh exit "]

дает другую зависимость от:

libcrypto.so.1.0.0 => /usr/local/Wolfram/Mathematica/10.0/SystemFiles/Libraries/Linux-x86-64/libcrypto.so.1.0.0 (0x00007f30fbe3c000) libz.so.1 => /usr/local/Wolfram/Mathematica/10.0/SystemFiles/Libraries/Linux-x86-64/libz.so.1 (0x00007f30fba20000)

Моим решением было заменить файл /usr/local/Wolfram/Mathematica/10.0/SystemFiles/Libraries/Linux-x86-64/libcrypto.so.1.0.0 с /lib/x86_64-linux-gnu/libcrypto.so.1.0

это, вероятно, не самый лучший способ, но работает.

Смежные вопросы