我想知道是否有办法记录服务器收到的命令。它可以是所有 SSH 命令,只要它包含与文件传输相关的命令的信息。
我在使用 SFTP 客户端时遇到了问题,并且创建者要求提供日志,但我找不到任何现有日志。
我希望同时登录 CentOS 或 OS X(尽管我怀疑如果可能的话,两者上都会类似)。
答案1
OpenSSH 版本 4.4p1 及更高版本(应该包括 CentOS 5 的最新版本)具有内置的 SFTP 日志记录功能 - 您只需要对其进行配置。
在你的 sshd_config 中找到它(在 centos 中,文件/etc/ssh/sshd_config):
Subsystem sftp /usr/libexec/openssh/sftp-server
并将其更改为:
Subsystem sftp /usr/libexec/openssh/sftp-server -l INFO
INFO 只是默认显示内容的一个细节级别 - 它提供有关文件传输、权限更改等的详细信息。如果您需要更多信息,可以相应地调整日志级别。各个级别(按详细程度排序)如下:
QUIET, FATAL, ERROR, INFO, VERBOSE, DEBUG, DEBUG1, DEBUG2, and DEBUG3
VERBOSE 以外的任何内容可能都比您要查找的信息多,但它可能会有用。
最后重新启动 SSH 服务以更新更改(centos):
systemctl restart sshd
答案2
针对 sftp-server 的日志记录的相同开关也适用于 internal-sftp。以下是我的 /etc/ssh/sshd_config 中的一个示例:
Subsystem sftp internal-sftp -f AUTH -l INFO
启用 INFO 级别日志记录后,消息将开始显示在 /var/log/messages 下(至少在基于 Red Hat 的发行版下):
May 27 05:58:16 test-server sshd[20044]: User child is on pid 20049
May 27 05:58:16 test-server sshd[20049]: subsystem request for sftp by user test-user
May 27 05:58:16 test-server internal-sftp[20050]: session opened for local user test-user from [192.168.1.1]
May 27 05:58:16 test-server internal-sftp[20050]: received client version 3
May 27 05:58:16 test-server internal-sftp[20050]: realpath "."
May 27 05:58:21 test-server internal-sftp[20050]: opendir "/home/test-user/"
May 27 05:58:21 test-server internal-sftp[20050]: closedir "/home/test-user/"
May 27 05:58:21 test-server internal-sftp[20050]: lstat name "/home/test-user/upload"
May 27 05:58:21 test-server internal-sftp[20050]: realpath "/home/test-user/upload/"
May 27 05:58:21 test-server internal-sftp[20050]: stat name "/home/test-user/upload"
May 27 05:58:24 test-server internal-sftp[20050]: open "/home/test-user/upload/test-file.pdf" flags WRITE,CREATE,TRUNCATE mode 0664
May 27 05:58:25 test-server internal-sftp[20050]: close "/home/test-user/upload/test-file.pdf" bytes read 0 written 1282941