我正在尝试使用plink.exe从windows机器远程发出一些命令到Linux机器,并且它成功执行除 sudo su -
之外的所有命令实际上,它也会执行sudo su - 我可以看到我现在是超级用户的输出,但此时它会冻结,因此不能执行任何其他命令。
这是我到目前为止所使用的:
{
labels: ['Here', 'are', 'your', 'x-axis', 'labels'],
datasets: [
{
label: 'artist 1',
backgroundColor: 'rgba(75, 192, 192, 0.2)',
data: [0, 1, 2, 3, 4],
},
{
label: 'artist 2',
backgroundColor: 'rgba(255, 99, 132, 0.2)',
data: [0, 1, 2, 3, 4],
},
],
}
我还尝试将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"
并关闭连接 - 仍然没有执行最后的触摸命令
还尝试添加&和;像这样:
logout root
stty: Not a typewriter
stty: Not a typewriter
stty: Not a typewriter
这给了我:
./plink.exe -ssh -v -pw myPassHere myUser@myHost "hostname;ls -la;sudo su -&;touch test.me"
我非常确定在发出sudo su - 命令后,提示符需要一个结果,这就是为什么它冻结但不知道如何暂停一段时间以允许sudo su - 命令执行或如何避免shell期望输出。
答案 0 :(得分:2)
在非交互式上下文中不应该需要sudo su -
(这种非交互性导致“stty:Not a typewriter”错误)。
只需使用sudo touch test.me
。
答案 1 :(得分:0)
此方法基于通过命令提示符执行。 首先,确保将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\" myuser@10.42.81.9";
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();
}