Python Linux服务器列出可以登录的用户

Python Linux服务器列出可以登录的用户,python,linux,bash,Python,Linux,Bash,我想要一个单行shell命令或一个简短的Bash/Python脚本,它将列出Linux服务器上可以登录到该机器的所有用户。因此,像www数据和邮件这样的用户当然会被排除在外,但root将是列表的一部分 例如,这段代码是有效的。我但我在找更简单更干净的 awk -F: '$2 != "*" && $2 !~ /^!/ { print $1, " can log in" }' /etc/shadow 我在找到Bash脚本 Bash版本: awk -F: '$2 != "*" &am

我想要一个单行shell命令或一个简短的Bash/Python脚本,它将列出Linux服务器上可以登录到该机器的所有用户。因此,像www数据和邮件这样的用户当然会被排除在外,但
root
将是列表的一部分

例如,这段代码是有效的。我但我在找更简单更干净的

awk -F: '$2 != "*" && $2 !~ /^!/ { print $1, " can log in" }' /etc/shadow

我在找到Bash脚本

Bash版本:

awk -F: '$2 != "*" && $2 !~ /^!/ { print $1, " can log in" }' /etc/shadow
users = [i.split(':') for i in open('/etc/shadow').readlines()]
print '\n'.join([i[0] for i in users if i[1] not in ('!', '*')])
Python版本:

awk -F: '$2 != "*" && $2 !~ /^!/ { print $1, " can log in" }' /etc/shadow
users = [i.split(':') for i in open('/etc/shadow').readlines()]
print '\n'.join([i[0] for i in users if i[1] not in ('!', '*')])

我在找到Bash脚本

Bash版本:

awk -F: '$2 != "*" && $2 !~ /^!/ { print $1, " can log in" }' /etc/shadow
users = [i.split(':') for i in open('/etc/shadow').readlines()]
print '\n'.join([i[0] for i in users if i[1] not in ('!', '*')])
Python版本:

awk -F: '$2 != "*" && $2 !~ /^!/ { print $1, " can log in" }' /etc/shadow
users = [i.split(':') for i in open('/etc/shadow').readlines()]
print '\n'.join([i[0] for i in users if i[1] not in ('!', '*')])

您可以使用此oneliner列出在/etc/shadow中设置了密码的所有用户,每行一个:

getent shadow | egrep '^[^:]*:[*!]:' -v | cut -f1 -d:
这仅适用于本地用户,在使用LDAP数据库或其他方法时不起作用

如果您正在使用LDAP,并且希望列出目录中的所有用户,则可以尝试:

getent passwd | cut -f1 -d:

尽管如此,这将列出所有用户,包括“非用户”帐户,例如
www-data

您可以使用此oneliner列出在/etc/shadow中设置了密码的所有用户,每行一个:

getent shadow | egrep '^[^:]*:[*!]:' -v | cut -f1 -d:
这仅适用于本地用户,在使用LDAP数据库或其他方法时不起作用

如果您正在使用LDAP,并且希望列出目录中的所有用户,则可以尝试:

getent passwd | cut -f1 -d:

尽管如此,这将列出所有用户,包括“非用户”帐户,例如
www-data

,看起来您希望我们为您编写一些代码。虽然许多用户愿意为陷入困境的程序员编写代码,但他们通常只在海报已经试图自己解决问题时才提供帮助。演示这项工作的一个好方法是,包括您迄今为止编写的代码、示例输入(如果有)、预期输出和实际获得的输出(控制台输出、堆栈跟踪、编译器错误——任何适用的)。您提供的详细信息越多,您可能收到的答案就越多。我用一些有效的代码更新了这个问题。您已经差不多做到了,只需从您的sshd配置中读取min user id值,并使用它来过滤/etc/passwd中的条目|shadow@lynks感谢sshd提示。我检查了,但在我的sshd配置中没有找到最小用户id值。但我想我不会把剧本写得那么深。我正在运行Ubuntu11.04服务器。是的,我在想别的事情,别理我:PIt看起来像是你想让我们为你写一些代码。虽然许多用户愿意为陷入困境的程序员编写代码,但他们通常只在海报已经试图自己解决问题时才提供帮助。演示这项工作的一个好方法是,包括您迄今为止编写的代码、示例输入(如果有)、预期输出和实际获得的输出(控制台输出、堆栈跟踪、编译器错误——任何适用的)。您提供的详细信息越多,您可能收到的答案就越多。我用一些有效的代码更新了这个问题。您已经差不多做到了,只需从您的sshd配置中读取min user id值,并使用它来过滤/etc/passwd中的条目|shadow@lynks感谢sshd提示。我检查了,但在我的sshd配置中没有找到最小用户id值。但我想我不会把剧本写得那么深。我正在运行Ubuntu11.04服务器。是的,我在想别的事情,忽略我:P