【问题标题】:How to check whether user exists in Linux (JSch)如何检查用户是否存在于 Linux (JSch)
【发布时间】:2025-12-19 12:20:13
【问题描述】:

我正在使用 JSch 在 Linux 机器上连接/创建用户。我能够成功连接 Linux 机器并创建用户。但是我无法在创建用户时检查该用户是否已经存在于机器中。为此我尝试了命令:id -u name

我的实现是:

System.out.println("Connected");

Channel channel=session.openChannel("exec");
((ChannelExec)channel).setCommand("id -u name");
channel.setInputStream(null);
((ChannelExec)channel).setErrStream(System.err);

InputStream in=channel.getInputStream();
channel.connect();

但它不知道它是真是假。如何使用 JSch 来检查 Linux 中是否存在用户?

【问题讨论】:

    标签: java shell jsch


    【解决方案1】:

    您正在读取InputStream,如果您要求现有用户,则该用户的ID,但如果您要求不在系统中的用户,则输出将写入错误流中。如果你想读取一个流,你可以修改你的命令来打印最后执行的命令的退出状态。

    session.connect();
    ChannelExec channel = (ChannelExec) session.openChannel("exec");
    channel.setCommand("id -u name; echo $?");
    channel.connect();
    

    如果你要求一个存在的用户,输出将有2行,第一行是用户的id,第二行是0,表示执行成功,如果用户不存在,则流的内容将与 0 不同,表示命令执行失败。

    【讨论】: