Ошибка выполнения команды qstat с использованием SSH.Net

Вопрос или проблема

Я разрабатываю приложение для мониторинга статуса заданий в очереди на удаленном сервере. Я использую VB.Net и пакет Nuget SSH.Net для установления SSH-соединения и выполнения команды qstat, чтобы получить статус определенного задания. Я смог успешно подключиться к серверу, но когда я выполняю команду qstat, я получаю следующую ошибку: ksh: qstat: not found. Если я подключаюсь к тому же серверу с помощью Putty и выполняю ту же команду, она работает нормально.
Ниже приведен фрагмент кода, иллюстрирующий проблему:

Imports Renci.SshNet
Imports Renci.SshNet.Common

Module Module1
    Sub Main()
        Dim hostName As String = "hostname"
        Dim userName As String = "username"
        Dim password As String = "********"

        Dim keyboardAuthentication As New KeyboardInteractiveAuthenticationMethod(userName)
        AddHandler keyboardAuthentication.AuthenticationPrompt, AddressOf AuthenticationPromptEventRaised

        Dim passwordAuthentication As New PasswordAuthenticationMethod(userName, password)
        Dim connectionInfo As New ConnectionInfo(hostName, userName, keyboardAuthentication, passwordAuthentication)

        Dim sshClient = New SshClient(connectionInfo)
        sshClient.Connect()

        Dim cmd As SshCommand
        Dim err As String

        cmd = sshClient.RunCommand("qstat -h")
        err = cmd.Error
        sshClient.Disconnect()

        Console.WriteLine(err)
    End Sub

    Private Sub AuthenticationPromptEventRaised(ByVal sender As Object,
                                                ByVal e As AuthenticationPromptEventArgs)
        Dim password As String = "********"
        For Each prompt As AuthenticationPrompt In e.Prompts
            If prompt.Request.IndexOf("Password:", StringComparison.InvariantCultureIgnoreCase) <> -1 Then
                prompt.Response = password
            End If
        Next
    End Sub
End Module

Почему команда qstat не найдена при использовании SSH.Net? Может кто-нибудь помочь мне решить эту проблему?

.

Ответ или решение

Ошибка при выполнении команды qstat с использованием SSH.Net: что делать?

Ваша проблема с выполнением команды qstat, которая вызывает сообщение об ошибке ksh: qstat: not found при использовании SSH.Net, хотя команда успешно выполняется в Putty, может быть вызвана несколькими факторами. Мы рассмотрим возможные причины и предложим пути их устранения.

1. Путь к команде

Одной из частых причин, почему команда не распознается, является отсутствие ее в переменной окружения PATH для текущего сеанса SSH, инициируемого через SSH.Net. Когда вы используете терминал Putty, он может загружать конфигурационные файлы (например, .bashrc, .bash_profile, .profile), которые обновляют переменные окружения. SSH.Net может работать с другим оболочкой или не загружать те же файлы и настройки.

Решение: Вы можете попробовать явно указать полный путь к команде qstat. Например:

cmd = sshClient.RunCommand("/usr/bin/qstat -h")

Не забудьте проверить фактическое расположение команды на сервере.

2. Профиль оболочки

Если команда qstat доступна, но оболочка, используемая SSH.Net, может не загружать соответствующий профиль, это может быть причиной проблемы. Команда может просто не загружаться в интернет-сеанс SSH.

Решение: Попробуйте выполнить source ~/.bashrc или другую команду, чтобы загрузить профиль, перед запуском qstat:

cmd = sshClient.RunCommand("source ~/.bashrc; qstat -h")

3. Shell по умолчанию

По умолчанию SSH.Net может использовать другую оболочку (например, ksh), в то время как Putty может использовать shell Bash. Это может привести к различиям в доступных командах и переменных.

Решение: Вы можете явно указать, какая оболочка должна быть использована в вашем SSH-соединении. Например, попробуйте указать bash в начале вашей команды:

cmd = sshClient.RunCommand("bash -c 'qstat -h'")

4. Уровень доступа и права

Проблема также может быть связана с правами доступа пользователя, под которым вы подключаетесь. Убедитесь, что пользователь имеет права на выполнение команды qstat.

Решение: Проверьте права пользователя, который используется для SSH-подключения. Если необходимо, используйте более привилегированного пользователя (например, root), если это допустимо.

5. Ошибки в коде

Иногда ошибки могут быть вызваны синтаксическими ошибками в коде. Убедитесь, что код исполняется корректно без внутренних ошибок. Пример вашего кода выглядит правильно, но стоит убедиться в отсутствии опечаток или неверных данных аутентификации.

Заключение

Мы рассмотрели несколько распространенных причин, по которым команда qstat может не выполняться через SSH.Net, несмотря на правильную работу в Putty. Попробуйте следовать предложенным решениям и проверить работу команды. Если ошибка сохраняется, возможно, имеет смысл обратиться к системному администратору для более глубокого анализа конфигурации сервера и прав доступа.

Если у вас возникнут дополнительные вопросы или потребуется помощь, не стесняйтесь обращаться!

Оцените материал
Добавить комментарий

Капча загружается...