Plink зависает после команды sudo su -

Я пытаюсь удаленно выполнить некоторые команды для Linux-бокса с компьютера с Windows, используя plink.exe, и он успешно выполняет все команды, кроме sudo su -

На самом деле, он также выполняет sudo su - и я вижу вывод, что теперь я суперпользователь, но в этот момент он зависает, поэтому никакие другие команды не могут быть выполнены.

Это то, что я использую до сих пор:

./plink.exe -ssh -v -pw myPassHere myUser@myHost "hostname;ls -la;sudo su - ; touch test.me"

Я также попытался отправить эту команду sudo su в фоновый режим следующим образом:

 ./plink.exe -ssh -v -pw myPassHere myUser@myHost "hostname;ls -la; sudo su - & touch test.me"

и это выполнит вышеуказанные команды, включая sudo su, но добавит это:

logout root
stty: Not a typewriter
stty: Not a typewriter
stty: Not a typewriter

и закройте соединение, не выполняя последнюю команду touch

Также попытался добавить как &, так и ; как это:

./plink.exe -ssh -v -pw myPassHere myUser@myHost "hostname;ls -la;sudo su -&;touch test.me"

И это дает мне:

ksh: syntax error at line 1 : 'end of file' unexpected

Я почти уверен, что после ввода команды sudo su - приглашение ожидает результата, и поэтому оно зависает, но не знаю, как сделать паузу на некоторое время, чтобы разрешить выполнение команды sudo su - или как избежать оболочки ожидая выхода.


person Stan K    schedule 03.05.2018    source источник


Ответы (2)


Вам не нужно sudo su - в неинтерактивном контексте (и именно эта неинтерактивность вызывает ошибку "stty: Not a typewriter").

Просто используйте sudo touch test.me.

person AKX    schedule 03.05.2018
comment
У меня нет пароля администратора, поэтому для выполнения команд с правами администратора мне нужно использовать sudo su - - person Stan K; 03.05.2018

Этот подход основан на выполнении через командную строку. Во-первых, убедитесь, что Putty и Plink добавлены в ваши переменные окружения. Затем попробуйте этот код

try
                {
    // To connect using putty/plink
                String initialConnect = "cmd /c PLINK.exe -batch -i \"<path_to_keytab>\" <username>@<hostname>";
                //Eg.: String initialConnect = "cmd /c PLINK.exe -batch -i \"C:\\Users\\vsakaray\\Downloads\\private_key.ppk\" [email protected]";
                Process p = Runtime.getRuntime().exec(initialConnect);
                /* Get OuputStream */
                PrintWriter writer = new PrintWriter(new OutputStreamWriter(new BufferedOutputStream(p.getOutputStream())), true);
                /* Storing list of commands to execute */
                String commands[] = { "sudo su user", "cd ~", "pwd" };
                /* Executing commands */
                for (String command : commands)
                {
                    writer.println(command.trim());
                }
                Thread.sleep(5000);
                int value = 0;
                InputStream std = p.getInputStream();
                /* Printing the console output */
                if (std.available() > 0)
                {
                    System.out.println("STD:");
                    value = std.read();
                    System.out.print((char) value);
                    while (std.available() > 0)
                    {
                        value = std.read();
                        System.out.print((char) value);
                    }
                }
                System.out.print("DONE!!!");
            }
            catch (Exception e)
            {
                e.printStackTrace();
            }
person Vidyasagar Sakaray    schedule 10.01.2020