有时,由于各种原因,PyTTY 会与我的 CentOS 7 服务器上的 SSH 会话失去连接(PuTTY 有问题、SSH 服务器有问题、路由器已重新启动、连接断开、电缆拔出等)。这些被放弃的会话会给服务器带来负担并消耗资源。是否可以将 CentOS 7 SSH 服务器配置为在 24 小时后自动终止任何 SSH 会话,无论会话目的和状态如何?
为什么要不管会话目的和状态?因为在我看来,有时很难区分正常会话和放弃的会话。
有时,由于各种原因,PyTTY 会与我的 CentOS 7 服务器上的 SSH 会话失去连接(PuTTY 有问题、SSH 服务器有问题、路由器已重新启动、连接断开、电缆拔出等)。这些被放弃的会话会给服务器带来负担并消耗资源。是否可以将 CentOS 7 SSH 服务器配置为在 24 小时后自动终止任何 SSH 会话,无论会话目的和状态如何?
为什么要不管会话目的和状态?因为在我看来,有时很难区分正常会话和放弃的会话。
自 2021 年以来,我一直在使用internal-sftp
子系统方法,允许 SFTP 但禁止 SSH,没有任何问题。
我的 ssh_config 文件代码是:
ForceCommand internal-sftp
Subsystem sftp sftp-server.exe -d \%
ChrootDirectory \%
PermitTunnel no
AllowAgentForwarding no
AllowTcpForwarding no
X11Forwarding no
AllowUsers sftpuser
与其他人一样,在 2024 年 10 月 Windows 更新后的周末,我无法通过 SSH 连接到服务器。
在服务器上,OpenSSH SSH 服务器无法启动,并且我收到 1067 错误。
按照建议,当我删除 \ssh 文件夹时,服务现在可以成功重新启动,但自动创建的新 ssh 文件夹具有默认的 ssh_config 文件代码:
Match Group administrators
AuthorizedKeysFile __PROGRAMDATA__/ssh/administrators_authorized_keys
当我用上面的代码替换此代码时,internal-sftp
我再次收到 1067 错误。
想知道是什么导致该代码与新的更新不兼容。
我正在尝试遵循本教程https://p11-glue.github.io/p11-glue/p11-kit/manual/remoting.html,但有很多地方让我感到困惑。
它说“在本地客户端上设置 PKCS#11 转发服务器”。所以我明白我的本地机器充当 p11 服务器的角色,直接与智能卡连接(在后面的设置中,我使用 softhsm 作为智能卡)。他们提到了
P11_KIT_SERVER_ADDRESS
,但命令是在“本地客户端”上执行的,这令人困惑。
在会话“为 PKCS#11 套接字转发准备远程系统”中。“转发 PKCS#11 套接字”,他们找到用户运行时目录,但其中一个是通过“ssh”完成的。所以我认为是
runtime directory
在远程系统上。(他们还使用术语remote server
或remote host
)
如下所述,我描述了我在 2 个容器中执行的步骤,A - 作为我的本地机器,B - 作为远程主机。我使用 softhsm 来模拟智能卡。在本地机器 A 上:
$ p11tool --list-tokens
Token 0:
URL: pkcs11:model=p11-kit-trust;manufacturer=PKCS%2311%20Kit;serial=1;token=System%20Trust
Label: System Trust
Type: Trust module
Flags: uPIN uninitialized
Manufacturer: PKCS#11 Kit
Model: p11-kit-trust
Serial: 1
Module: p11-kit-trust.so
Token 1:
URL: pkcs11:model=SoftHSM%20v2;manufacturer=SoftHSM%20project;serial=d1472478b9829554;token=mimi
Label: mimi
Type: Generic token
Flags: RNG, Requires login
Manufacturer: SoftHSM project
Model: SoftHSM v2
Serial: d1472478b9829554
Module: /usr/local/lib/softhsm/libsofthsm2.so
因此,机器 A 上有 2 个可用的令牌。我还需要在本地主机上创建运行时目录。否则,当我这样做时会显示错误p11-kit server --provider ...
export XDG_RUNTIME_DIR=/tmp/$(id -u)-today
mkdir -p $XDG_RUNTIME_DIR
chmod 700 $XDG_RUNTIME_DIR
p11-kit server --provider /usr/local/lib/softhsm/libsofthsm2.so "pkcs11:model=SoftHSM%20v2;manufacturer=SoftHSM%20project;serial=01165599c52ea1fe;token=mimi"
P11_KIT_SERVER_ADDRESS=unix:path=/tmp/0-today/p11-kit/pkcs11-73; export P11_KIT_SERVER_ADDRESS;
P11_KIT_SERVER_PID=74; export P11_KIT_SERVER_PID;
在远程主机-B(172.18.0.3)上:
root@1de661b77dbd:~# export XDG_RUNTIME_DIR=/tmp/$(id -u)-nginx
root@1de661b77dbd:~# mkdir -p $XDG_RUNTIME_DIR && chmod 700 $XDG_RUNTIME_DIR
root@1de661b77dbd:~# systemd-path user-runtime
/tmp/0-nginx
root@1de661b77dbd:~# systemctl enable p11-kit-client.service
Failed to enable unit, unit p11-kit-client.service does not exist.
root@1de661b77dbd:~# systemctl list-unit-files | grep p11
p11-kit-client.service enabled enabled
root@1de661b77dbd:~# mkdir /tmp/0-nginx/p11-kit
我尝试使用 ssh 从 A 连接到机器 B, 但出现警告,因此我需要在 B 上创建,然后警告结束。在/从机器 Assh -R /tmp/0-nginx/p11-kit/pkcs11:${P11_KIT_SERVER_ADDRESS#*=} [email protected]
/tmp/0-nginx/p11-kit
root@b1d0c05c4ec6:~# ssh -R /tmp/0-nginx/p11-kit/pkcs11:${P11_KIT_SERVER_ADDRESS#*=} [email protected]
and then
root@1de661b77dbd:~# ls -l /tmp/0-nginx/p11-kit/pkcs11
srw------- 1 root root 0 Oct 17 10:56 /tmp/0-nginx/p11-kit/pkcs11
p11tool --provider /usr/lib/x86_64-linux-gnu/pkcs11/p11-kit-client.so --list-tokens
p11tool --provider /usr/local/lib/pkcs11/p11-kit-client.so --list-tokens
=> 远程机器上没有显示任何令牌p11-kit-client.so
。
我是否在任何步骤中犯了错误?为什么使用 p11-kit-client.so 时远程计算机上没有显示任何令牌?
openssh-server 升级后,无法从known_hosts
文件中删除旧密钥,因为ssh-keygen
出现以下情况:
$ ssh-keygen -R oldserver
/home/grin/.ssh/known_hosts:1: invalid line
/home/grin/.ssh/known_hosts:12: invalid line
/home/grin/.ssh/known_hosts:123: invalid line
Not replacing existing known_hosts file because of errors
我是否必须逐一删除这些行?
我正在使用ssh-keygen
(OpenSSH v8.9) 在无头服务器上自动生成密钥。如果不需要密码,这很简单,但如果确实需要密码,则变得困难。ssh-keygen
生成新密钥时,在 stdin 上需要 3 项内容:y
,因为密钥文件已经存在,以及所需的密码,重复两次。
经过一些简化,我这样做如下:
$ printf -v input "y\npassword\npassword\n"
$ echo -n "$input"
y
password
password
$ echo -n "$input" | ssh-keygen -t ed25519 -a100 -f tmpkey
当我最初这样做时,我得到了这个输出:
Generating public/private ed25519 key pair.
tmpkey already exists.
Overwrite (y/n)? ssh_askpass: exec(/usr/bin/ssh-askpass): No such file or directory
密钥对已创建,但私钥未加密。因此,我ssh-askpass
在装有 X 的测试系统上安装了ssh-keygen
。现在运行时,我得到了一个 OpenSSH 身份验证弹出窗口,并且 stdin 现在被忽略了。显然,即使我想要,也无法在无头服务器上使用图形弹出窗口。
那么到底发生了什么?我可以说服ssh-keygen
自动输入密码吗?如果不行,我是否可以用来openssl
添加密码,甚至创建文件?我确实想从中获取 OpenSSH 格式的密钥 - 我已经使用 openssl 自动化了 PKCS#8。
编辑
我找到了(not )SSH_ASKPASS_REQUIRE
的环境变量。如果我将其设置为“never”,它确实会停止弹出窗口,但现在只会读取 stdin 的第一行,并忽略接下来两行的密码。所以,它对我没有任何帮助。ssh
ssh-keygen
ssh-askpass
ssh-keygen
这在以下情况下很有用:
ssh
尝试所有密钥,并且某些主机配置为允许少量尝试(因此"Too many authentication failures"
出现错误)问题:对于技术支持活动,技术人员必须使用客户提供的凭据登录客户系统,但为了确保安全性和 ISO 合规性,我们需要记录哪位技术人员连接到哪个系统。
当前设置:我已为此类客户支持活动设置了 ssh 堡垒主机 (Debian 12)。我们通过堡垒强制访问客户系统;每位技术人员在堡垒上都有一个帐户,并通过 ssh 密钥进行身份验证。
堡垒既可用于 ssh,也可用于 Web 访问客户系统。SSH 访问通过 SSH 跳转工具 (ssh -J) 执行,Web 访问通过 SSH SOCKS5 代理执行。
我们需要记录来自堡垒的每个出站 TCP 连接,至少包括发起连接的技术人员的用户名、目标 IP 地址和端口。
我们已经进行了审计,日志通过 RSyslog 被输入到 SIEM 中。当前的工作设置使用简单的审计配置来记录连接:
auditctl -a always, exit -S connect -F success=1
由于某些我尚不明白的原因,当用户使用堡垒作为跳转主机启动与客户系统的连接时,会记录 DNS 查询(具有正确的用户属性),但不会记录与目标主机的实际连接。
以下是我在审计日志中得到的内容:
Aug 20 15:26:09 bastion1 audisp-syslog: type=SYSCALL msg=audit(**1724167569.113:16994887**): arch=c000003e syscall=42 success=yes exit=0 a0=b a1=7f49a2dfa454 a2=10 a3=7ffe86122474 items=0 ppid=3840918 pid=3840929 auid=1002 uid=1002 gid=1002 euid=1002 suid=1002 fsuid=1002 egid=1002 sgid=1002 fsgid=1002 tty=(none) ses=5005 comm="sshd" exe="/usr/sbin/sshd" subj=unconfined key=(null) ARCH=x86_64 SYSCALL=connect AUID="firstname-lastname" UID="firstname-lastname" GID="firstname-lastname" EUID="firstname-lastname" SUID="firstname-lastname" FSUID="firstname-lastname" EGID="firstname-lastname" SGID="firstname-lastname" FSGID="firstname-lastname"
Aug 20 15:26:09 bastion1 audisp-syslog: type=SOCKADDR msg=audit(**1724167569.113:16994887**): saddr=02000035080808080000000000000000 SADDR={ saddr_fam=inet **laddr=8.8.8.8 lport=53** }
Aug 20 15:26:09 bastion1 audisp-syslog: type=PROCTITLE msg=audit(**1724167569.113:16994887**): proctitle=737368643A20726F646F6C666F2D73616363616E69205B707269765D
Aug 20 15:26:09 bastion1 audisp-syslog: type=EOE msg=audit(**1724167569.113:16994887**):
此 DNS 查询已记录,但没有有关实际 SSH 连接的日志。
关于 SOCKS 代理,auditd 似乎无法提供我们需要的日志,出站连接似乎是由 sshd 用户发起的。
关于如何解决这个问题有什么建议吗?
谢谢
我多次尝试连接 Windows 10 托管的 SSH 服务器均失败。事件日志未提供有关源 IP 和其他远程网络详细信息的任何信息。如何填充此信息?计算机策略设置为记录成功和失败,但仍然未收集任何信息。
帐户登录失败。
主题:安全 ID:SYSTEM 帐户名称:DESKTOP-TEST1 帐户域:WORKGROUP 登录 ID:0x3E7
登录类型:8
登录失败的帐户:安全 ID:NULL SID 帐户名称:- 帐户域:-
故障信息:故障原因:未知用户名或密码错误。状态:0xC000006D 子状态:0xC000006A
进程信息:调用者进程 ID:0x2638 调用者进程名称:C:\Windows\System32\OpenSSH\sshd.exe
**网络信息:
Workstation Name: -
Source Network Address: -
Source Port: -**
详细的身份验证信息:登录过程:Advapi
身份验证包:协商传输服务:- 包名称(仅限 NTLM):- 密钥长度:0
我需要暂时在 Fedora 40 工作站上使用密钥启用 root SSH。SSH 客户端日志确认已发送并接受了正确的密钥(复制如下)。sshd
调试日志(也在下面)显示相同内容,但不知何故ROOT LOGIN REFUSED FROM ...
仍在发生。
我做过的事情:
/etc/ssh/sshd_config
: PermitRootLogin yes
+AllowUsers root ...
DenyUsers|DenyGroups
在同一个文件中没有设置。sudo passwd -S root
,并且也拥有有效的 shell。sudo setenforce 0
为排除 SELinux。ls -l /root/.ssh/authorized_keys
(和父目录)确认正确的权限(600,700)-(StrictModes no
无论如何,以防万一使用)/etc/security/access.conf
显示对 root 没有限制(所有行均已注释)cat /etc/pam.d/
客户端日志:
ssh -v -t -o IdentitiesOnly=yes -o PreferredAuthentications=publickey [email protected]
...
debug1: Authentications that can continue: publickey,gssapi-keyex,gssapi-with-mic
debug1: Next authentication method: publickey
debug1: Will attempt key: /Users/.../.ssh/id_ed25519 ED25519 SHA256:4ZMC... explicit agent
debug1: Offering public key: /Users/.../.ssh/id_ed25519 ED25519...
debug1: Server accepts key: /Users/.../.ssh/id_ed25519 ED25519...
debug1: Authentications that can continue: publickey,gssapi-keyex,gssapi-with-mic
debug1: No more authentication methods to try.
[email protected]: Permission denied (publickey,gssapi-keyex,gssapi-with-mic).
服务器日志:
Jul 25 08:37:05 n1 sshd[110058]: debug1: PAM: initializing for "root"
Jul 25 08:37:05 n1 sshd[110058]: debug1: PAM: setting PAM_RHOST to "192.168.1.23"
Jul 25 08:37:05 n1 sshd[110058]: debug1: PAM: setting PAM_TTY to "ssh"
Jul 25 08:37:05 n1 sshd[110058]: debug1: userauth-request for user root service ssh-connection method publickey [preauth]
Jul 25 08:37:05 n1 sshd[110058]: debug1: attempt 1 failures 0 [preauth]
Jul 25 08:37:05 n1 sshd[110058]: debug1: userauth_pubkey: publickey test pkalg ssh-ed25519 pkblob ED25519 SHA256:4ZMC4... [preauth]
Jul 25 08:37:05 n1 sshd[110058]: debug1: temporarily_use_uid: 0/0 (e=0/0)
Jul 25 08:37:05 n1 sshd[110058]: debug1: trying public key file /root/.ssh/authorized_keys
Jul 25 08:37:05 n1 sshd[110058]: debug1: fd 5 clearing O_NONBLOCK
Jul 25 08:37:05 n1 sshd[110058]: debug1: /root/.ssh/authorized_keys:1: matching key found: ED25519 SHA256:4ZMC4....
Jul 25 08:37:05 n1 sshd[110058]: debug1: /root/.ssh/authorized_keys:1: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding
Jul 25 08:37:05 n1 sshd[110058]: Accepted key ED25519 SHA256:4ZMC4.... found at /root/.ssh/authorized_keys:1
Jul 25 08:37:05 n1 sshd[110058]: debug1: restore_uid: 0/0
Jul 25 08:37:05 n1 sshd[110058]: Postponed publickey for root from 192.168.1.23 port 50995 ssh2 [preauth]
Jul 25 08:37:05 n1 sshd[110058]: debug1: userauth-request for user root service ssh-connection method [email protected] [preauth]
Jul 25 08:37:05 n1 sshd[110058]: debug1: attempt 2 failures 0 [preauth]
Jul 25 08:37:05 n1 sshd[110058]: debug1: temporarily_use_uid: 0/0 (e=0/0)
Jul 25 08:37:05 n1 sshd[110058]: debug1: trying public key file /root/.ssh/authorized_keys
Jul 25 08:37:05 n1 sshd[110058]: debug1: fd 5 clearing O_NONBLOCK
Jul 25 08:37:05 n1 sshd[110058]: debug1: /root/.ssh/authorized_keys:1: matching key found: ED25519 SHA256:4ZMC4j....
Jul 25 08:37:05 n1 sshd[110058]: debug1: /root/.ssh/authorized_keys:1: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding
Jul 25 08:37:05 n1 sshd[110058]: Accepted key ED25519 SHA256:4ZMC4jv... found at /root/.ssh/authorized_keys:1
Jul 25 08:37:05 n1 sshd[110058]: debug1: restore_uid: 0/0
Jul 25 08:37:05 n1 sshd[110058]: debug1: auth_activate_options: setting new authentication options
Jul 25 08:37:05 n1 sshd[110058]: ROOT LOGIN REFUSED FROM 192.168.1.23 port 50995
Jul 25 08:37:05 n1 sshd[110058]: Failed publickey for root from 192.168.1.23 port 50995 ssh2: ED25519 SHA256:4ZMC4jv....
Jul 25 08:37:05 n1 sshd[110058]: debug1: auth_activate_options: setting new authentication options [preauth]
Jul 25 08:37:05 n1 sshd[110058]: ROOT LOGIN REFUSED FROM 192.168.1.23 port 50995 [preauth]
Jul 25 08:37:05 n1 sshd[110058]: Connection closed by authenticating user root 192.168.1.23 port 50995 [preauth]
还:
cat /etc/securetty
ssh
pts/0
pts/1
pts/2
pts/3