logger只能将明文数据发送到 UDP 套接字、TCP 套接字或本地 UNIX 域套接字(如,如果没有另外指示,/dev/log则为默认值)。logger
我假设您已rsyslog在远程服务器(例如syslog-server.mydomain)上设置为侦听 TCP 端口 6514,因为这是通过 TLS 使用 Syslog时的默认端口。我进一步假设rsyslog远程服务器的配置与此类似:
# Certificate configuration for encrypted transmission:
global(
defaultNetstreamDriver = "gtls"
defaultNetstreamDriverCAFile = "/path/to/root-ca.crt"
defaultNetstreamDriverCertFile = "/path/to/certificates/server-certificate.crt"
defaultNetstreamDriverKeyFile = "/path/to/keys/server-private.key"
)
# Load input module for encrypted TCP to receive messages from the clients:
module(
load = "imtcp"
StreamDriver.Name = "gtls"
StreamDriver.Mode = "1"
StreamDriver.AuthMode = "anon"
)
# Ruleset to write externally received messages to a certain file:
ruleset(name="from_remote") {
action(type="omfile" File="/var/log/messages-from-remote.log")
}
# Bind above ruleset to the TCP listener on port 6514:
input(type="imtcp" port="6514" ruleset="from_remote")
Run Code Online (Sandbox Code Playgroud)
通常(如果远程服务器未设置为通过 TLS 使用 Syslog)您可以发出
logger --tcp --server syslog-server.mydomain --port 6514 -p local1.info "Hello World, $RANDOM"
Run Code Online (Sandbox Code Playgroud)
但由于logger无法处理 TLS,这不起作用。相反,您必须手动准备系统日志消息并通过 发送gnutls-cli。将服务器的 CA 文件复制到本地计算机,然后发出:
echo "<142>$HOSTNAME Hello World, $RANDOM" | \
gnutls-cli syslog-server.mydomain --port=6514 --x509cafile=/path/to/root-ca.crt
Run Code Online (Sandbox Code Playgroud)
是<142>的编码值local1.info,$HOSTNAME是源主机,文本Hello World, $RANDOM是实际的日志消息。gnutls-cli从其标准输入读取此字符串并使用给定的 CA 将其发送到给定的服务器和端口。
该消息应该出现在远程服务器上的文件中/var/log/messages-from-remote.log。
该工具gnutls-cli是软件包的一部分gnutls-bin,可以通过安装sudo apt install gnutls-bin。
当然,您也可以将本地 rsyslog配置为通过 TLS将某些消息转发到远程服务器,然后logger照常使用,即:将logger消息发送到本地rsyslog守护进程(无论如何都是默认的),然后让本地rsyslog转发加密的消息信息。
| 归档时间: |
|
| 查看次数: |
8551 次 |
| 最近记录: |