0

也许不是措辞最好的问题,但希望这是一个直截了当的问题。

该场景是从框 A 上的个人帐户通过 SSH 连接到框 B 上的通用帐户。框 B 上运行的脚本需要捕获个人帐户名称以进行日志记录。有什么方法可以捕获这个,无论是通过 SSH 本身还是通过 shell 捕获的一些信息?我们在 Solaris 上使用 ssh2(反射)和 KornShell(ksh)。

4

2 回答 2

1

如果您完全控制客户端计算机,则可以部署 identd 来获取用户名。

从脚本中获取名称的完整过程:

  1. 走上进程树,找到 sshd
  2. 走 netstat -p 以查找远程 IP 和端口。
  3. 连接到端口 113 上的客户端并询问。

您可能必须禁用权限分离才能按原样工作;然而,修改它以使其不工作应该是微不足道的。

于 2009-05-20T15:17:19.420 回答
0
  • 您无法可靠地记录远程用户名
  • 您可以记录连接的 IP(请参阅 SSH_CONNECTION 变量)
  • 您可以有一个标准,他们使用 ssh 的别名记录远程用户名作为登录过程的一部分,或者他们将用户名存储在 .ssh/environment 文件中(但允许设置环境可能需要 ssh/sshd 配置变化)。

    alias sshblah='ssh blah "REMOTEUSER=$USER; bash' (除非那不起作用,而且我还没有试图找出原因 - 如果您使用 tcsh 等,情况会有所不同)。

您可以通过这种方式使用环境传递,并选择您允许设置的变量。您必须让用户为 $USER 设置一些替代项,例如 $REMOTE_USER=$USER,然后允许 $REMOTE_USER 通过。而且您相信他们不会错误地设置它,或者忘记设置它(您可以通过修改此机制来处理这种情况,但会有点烦恼)。

请注意,您几乎必须信任连接的客户端才能告诉您用户是谁 - 您可以使欺骗用户名变得困难/烦人,但除非您使用每用户证书而不是他们都知道的通用登录名/密码,否则您无法验证谁连接了。

于 2009-05-20T15:10:04.567 回答