有没有办法让rlwrap自动删除历史文件?

时间:2015-07-27 17:37:04

标签: linux unix rlwrap

我正在使用rlwrap将命令历史记录提供给linux服务器上的sqlplus / rman / etc。我可以看到正在生成.sqlplus_history等命令历史文件,因为这些文件是可能包含密码的纯文本文件,例如:如果用户在sqlplus中输入“connect username / password”,则存在安全风险,无法保密。

是否有一种更简单的方式,然后某种cron作业会定期删除日志?

我希望某些关键字可以触发删除日志,例如,如果读取'exit'或'quit'命令,则用户离开sqlplus并删除.sqlplus_history日志。这样的事情可能吗?

1 个答案:

答案 0 :(得分:1)

rlwrap有许多选项可以将命令行保留在历史记录列表之外(因此不在历史记录文件中),尽管不完全按照您描述的方式(我不会觉得它有用)

  • rlwrap --forget-matching connect sqlplus将不会记住包含字符串connect
  • 的任何输入行
  • 指定否定历史记录大小,例如rlwrap --histsize -3000会将历史记录文件视为只读(密码仍会在历史记录中显示,但不会写入文件)
  • 使用CTRL+O输入一行将使此特定行不在历史记录列表中。 (此操作可以重新绑定到另一个键,请参阅联机帮助页)

对于一个非常精美的密码检查器,可以像这样写一个过滤器censor_passwords

#!/usr/bin/env perl

use lib ($ENV{RLWRAP_FILTERDIR} or ".");
use RlwrapFilter;
use strict;

my $filter = new RlwrapFilter;

$filter -> help_text("This filter removes the password from SQL 'identified by' clauses\n");

$filter -> history_handler(sub { s/(identified\s+by\s+)(\S+)/$1 xXxXxXxX/ig; $_});

$filter -> run;

..然后像rlwrap -z censor_passwords sqlplus一样使用它。

任何包含IDENTIFIED BY yd6e7#te6的输入都会被记住为IDENTIFIED BY xXxXxXxX