我正在编写一个非常小的 C# 程序,旨在允许我通过 SSH(使用 SSH .NET 客户端库)远程连接到服务器,并执行命令,主要是有关打印机的命令,例如“lpstat”。在此之前,我曾经为此目的使用 Putty 并手动检查内容(主要是打印机状态)。我想自动化其中的一些。使用 Putty 我正在与 user1 连接(在连接后提示输入用户/密码时)并且必须“sudo su - user2”才能执行 lpstat 和其他命令。
现在问题来了:一旦我连接到 SSH .NET,命令“sudo su -”似乎会冻结连接。为什么 ?会不会和Serverfault的这个问题一样?如果有另一种方式以 user2 身份连接(即以不同方式使用 SSH .NET),那对我来说没问题。
重要笔记:
- 我不知道 user2 或 root 的密码
- 它是一个生产服务器。我不是它的管理员,也不是一个非常高级的 Unix 用户。我不想更改该服务器配置。
- 我相信冻结与要求输入密码的命令有关,但我不确定。
我当前的代码:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Renci.SshNet;
using System.IO;
using System.Threading;
namespace SSHChecker
{
class Program
{
static void Main(string[] args)
{
SshClient sshClient = new SshClient(
"IP",
666, // port
"user1",
"user1Password");
sshClient.Connect();
SshCommand sshCommand;
String res;
//sshCommand = sshClient.RunCommand("ls d /"); // works fine
sshCommand = sshClient.RunCommand("sudo su - user2"); // freezes ...
sshCommand = sshClient.RunCommand("ls d /"); // ... so this code is never executed.
sshClient.Disconnect();
}
}
}