Вопрос или проблема
Я разрабатываю приложение для мониторинга статуса заданий в очереди на удаленном сервере. Я использую 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. Попробуйте следовать предложенным решениям и проверить работу команды. Если ошибка сохраняется, возможно, имеет смысл обратиться к системному администратору для более глубокого анализа конфигурации сервера и прав доступа.
Если у вас возникнут дополнительные вопросы или потребуется помощь, не стесняйтесь обращаться!