AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / server / 问题

问题[ssh](server)

Martin Hope
DBCL
Asked: 2025-04-24 22:33:21 +0800 CST

SSH 和 sudo 在首次登录/会话时非常慢,之后立即出现 - 排除所有常见原因

  • 5

问题摘要

在我的 Debian 11 系统上,打开新的 SSH 会话或sudo在终端中首次使用时,我遇到了非常长的延迟(约 20-40 秒)。sudo在同一终端中执行后续命令时可以立即生效,但延迟在新终端中再次出现。请注意,远程 SSH 和本地 SSH ( ssh admin@localhost) 都会出现这种情况。

我尝试过的方法

  • UseDNS no并GSSAPIAuthentication no在 sshd_config 中设置。
  • 没有自定义或网络相关的 PAM 模块(没有pam_ldap、、等)pam_krb5。pam_sss
  • pam_systemd.so在普通会话中注释掉,没有任何效果。
  • nsswitch.conf 是标准的:仅适用于files和,不适用于用户/组 LDAP/NIS。dnshosts
  • hosts 是正确的,包括127.0.1.1主机名和真实 IP。
  • 没有/etc/nologin文件。
  • tmp 权限正确(drwxrwxrwt)。
  • 没有 access.conf 规则。
  • 配置文件、bash.bashrc、环境和用户点文件已清理或暂时移动。
  • 没有配额或磁盘空间问题。
  • 邮件存在并且可以访问。
  • passwd 和 group 正常。
  • sudoers 或 sudoers.d 中没有异常条目。
  • 没有/etc/motd.d/或自定义 MOTD 脚本。
  • 没有 limits.conf 或 limits.d 问题。
  • 没有/etc/ldap.conf或/etc/sssd/sssd.conf存在。
  • systemd-logind、dbus、 和polkit正在运行并已重新启动。
  • dmesg、auth.log 或 syslog中没有错误。
  • 延迟期间没有高 CPU、内存或 I/O 负载。
  • 没有网络挂载或自动文件系统 (autofs)。
  • pts 权限正确。
  • 主目录存在、具有正确的权限并且是本地的。
  • Shell 是 bash 并且可以工作。
  • 使用最少用户和 sh 作为 shell 进行测试
  • stracesudo并显示sshd在执行 shell 或用户配置文件脚本之前发生延迟。
  • straceon及其子项显示在内部文件描述符(而非网络套接字)上sshd长时间等待。select()read()
  • 延迟发生在密码验证成功之后但在 shell 提示符出现之前。
  • ssh -vvvdebug2: we sent a password packet, wait for reply输出显示之后和之前的延迟debug1: Authentication succeeded (password)。

更新

  • 可用熵:256
  • 硬件为Armv7 Cortex A7双核1GHz,2GB DDR3L,存储为eMMC

我完全不知道...最初看起来像是一个简单的 DNS 问题,但我完全不知道到底发生了什么。

感谢您的任何帮助或见解!

ssh
  • 1 个回答
  • 147 Views
Martin Hope
ljcorsa
Asked: 2025-04-24 05:50:29 +0800 CST

SSH 密钥对仅在调试模式下被 sshd 接受

  • 14

我使用的是 Rocky 9.4 和 OpenSSH 8.7p1,有一个 RSA 密钥对,但除非sshd 处于调试模式,否则无法使用。(还好我有一对旧的密钥对,还能用)。

我已取消设置 SSH_AUTH_SOCK,并确认没有代理参与。为了避免这种情况,我已移动 ~/.ssh/config 文件。我已确认 ~/.ssh/ 的模式为 0700,id_rsa 和 authorized_keys 的模式为 0400,known_hosts 的模式为 0600。我已确认 authorized_keys 中的公钥正确,并使用“ssh-keygen -l”进行了验证。

当 sshd 作为服务运行时,我运行“ssh -avv -i ~/.ssh/id_rsa localhost”,我看到:

Offering public key:  (with the correct filename and SHA256 fingerprint)
we sent a publickey packet, wait for reply
Authentications that can continue:  publickey, ...
we did not send a packet, disable method
Next authentication method: keyboard-interactive

...并提示我输入常用密码。

/var/log/secure 显示:

Connection from 127.0.0.1 ...
Failed publickey for (user) and shows the same correct SHA256 code.

我发现建议我停止 sshd 服务,并在调试模式下手动运行。我以 root 身份打开了第二个会话并运行:

systemctl stop sshd
/usr/sbin/sshd -D -ddd -e

当我在原始用户窗口中重复“ssh -avv -i ~/.ssh/id_rsa localhost”命令时,我看到:

Offering public key:  (with the correct filename and SHA256 fingerprint)
we sent a publickey packet, wait for reply
Server accepts key:   (with the correct filename and SHA256 fingerprint)
Enter passphrase for key '(filename)':  (I type passphrase)
Authenticated to 127.0.0.1 (via proxy) using "publickey".

...并且我已使用相同的密钥成功登录。

我希望 sshd -D -ddd 能帮助我解决问题,但它很高兴地接受了我的密钥。


更新时间:2024-04-30

采纳@mircea-vutcovici的建议,设置LogLevel: DEBUG在sshd尝试不同的密钥时生成不同的消息序列:失败的尝试包含一条authorized_keys不可读的消息,尽管所有密钥都在同一个文件和同一个sshd实例中!

我的 homedir 是一个 NFS 共享,并且 SELinux 正在强制执行,因此我使用@grawity 的建议 做了一些搜索: ls -LZproducedsystem_u:object_r:nfs_t:s0是一个通用的 SELinux 标签。显然,如果 NFS 挂载先于 SELinux 策略加载,就会出现问题。patchwork :selinux: make labeled NFS work when mount before policy load。这个问题已于 2023 年修复,应该会添加到 Rocky 9.4(2024 年中)。不过,/home它还是通过 NFS 挂载的vers=3,仅供参考。

我最终找到了一个有用的咒语 serverfault:NFS 家庭目录中的 SELinux 标签错误?: setsebool -P use_nfs_home_dirs on。我现在可以使用这两个密钥,但仍然不明白为什么它们会被区别对待,因为两个公钥都在同一个文件中,并且两个私钥在同一个文件夹中具有相同的权限。

刚碰到一个13年前的类似问题:仅当 sshd 为守护进程时,公钥认证才会失败。显然 SELinux 一直是问题所在 :-) 我要感谢 @grawity 的回答,它让我陷入了困境。

ssh
  • 2 个回答
  • 1315 Views
Martin Hope
God I Am Clown
Asked: 2025-04-03 02:51:35 +0800 CST

如何设置具有适当权限的 git-http-backend,以使存储库也可通过 SSH 访问

  • 5

情况:Debian12 主机,apache2 httpd 为 git CGI 提供服务(位于/repos/git)以克隆存储库。存储库存储在/repos目录中,并归用户所有,git以便用户能够通过 ssh 访问它们(例如,能够在控制台中写入)。git push [email protected]:repos/repo.git

问题是,git clone https://example.com/repos.git当所有内容都归 git 用户所有时,运行时 git CGI 会将其打印到stderr:

(13)Permission denied: [client <ip>:<port>] AH00035: access to /repos.git/info/refs denied (filesystem path '/repos/git') because search permissions are missing on a component of the path

如果我运行,克隆命令可以正常工作chown -R www-data:www-data /repos。但是这样,我无法通过 ssh 访问 repo(fatal: detected dubious ownership in repository at /repos/repo.git在客户端,即使git用户在www-data组内)

我尝试将目录设为用户git和组所拥有www-data并sharedRepository=0640在配置中启用(我也尝试了不同的值),但 CGI 脚本失败并出现此dubious ownership错误。我尝试设置全局配置,尝试创建目录2777和0666权限,但都不起作用。

澄清一下,我真的不喜欢以www-data用户身份登录以 ssh 访问 git repos。我觉得一定有sharedRepository我可以做的事情,但我不知道应该怎么做。

gitweb附言:由于我正在运行,所以不需要cgit,并且apache2配置(至少在理论上)在这里应该无关紧要。

ssh
  • 1 个回答
  • 123 Views
Martin Hope
Kroma
Asked: 2025-03-19 03:54:55 +0800 CST

Debian-为任何连接到 ssh 的用户运行脚本的现代方法

  • 5

每次任何用户登录时,只需阅读此答案 即可运行 shell 脚本。

Debian 稳定版在这里。我的 SSH 服务器有公钥连接,而不是密码连接。尽管如此,我还是想在用户连接时在服务器上运行一个脚本,然后他才能访问机器。如果脚本返回 false,则用户将被拒绝,即使他有正确的连接密钥。

我知道 /etc/profile 可以适合,但是在撰写此问题时,有没有更好的方法可以处理这种情况?(或者更安全,或者更容易?我认为 /etc/profile 没有任何问题,但也许更精通这个领域的人知道)

我不想以任何方式逃避这种控制。

谢谢大家

ssh
  • 1 个回答
  • 37 Views
Martin Hope
PRouleau
Asked: 2025-03-13 21:37:36 +0800 CST

使用 OpenSSH 8.7p1 的系统不接受与 OpenSSH 7.4p1 的连接 – 如何允许?

  • 5

我有以下旧 Linux 系统,并使用专有软件工具尝试将文件(使用sftp或 curl)复制到较新的 Linux 系统,但失败了。系统如下:

财产 发起人系统 目的地系统
操作系统 CentOS 7 衍生产品 Rocky Linux 9.5
SSH-V OpenSSH_7.4p1, OpenSSL 1.0.2k-fips 26 Jan 2017 OpenSSH_8.7p1, OpenSSL 3.2.2 4 Jun 2024

通过嗅探我们发现:

  • 服务器的Diffie-Hellman组交换答复数据包确认以下协商参数:
    • 密钥交换算法(KEX):diffie-hellman-group-exchange-sha256(匹配客户端支持✅)
    • 加密算法:aes128-ctr(符合客户端支持✅)
    • MAC 算法:hmac-sha2-256(符合客户端支持✅)
    • 压缩:无(匹配客户端支持✅)
    • 主机密钥类型:ssh-rsa(符合客户端支持✅但请参见下文)
    • 主机签名类型:rsa-sha2-256(潜在问题⚠️)

服务器的 KEX 回复中的主机密钥类型是 ssh-rsa,客户端支持该类型。但是,服务器使用的签名类型是 rsa-sha2-256,客户端在其 SSH_MSG_KEXINIT 消息中未声明支持该类型。

我一直在查看/etc/ssh/ssh_config和/etc/ssh/sshd_config文件,以查看可以在 Rocky Linux 9.5 系统上进行的配置修改以支持交换,但没有找到。我还尝试将以下内容添加到 /etc/ssh/sshd_config(如另一个案例所建议的) ,但也失败了:

# Allow mildly-outdated cipher selection                                                                                                                                                                                                                                                                                                                              
Ciphers +aes128-cbc                                                                                                                                                                                                                                                                                                                                                   
                                                                                                                                                                                                                                                                                                                                                                        
# Allow negotiating cipher key using weak DH                                                                                                                                                                                                                                                                                                                          
# (only add group1 if you *really* need it)                                                                                                                                                                                                                                                                                                                           
KexAlgorithms +diffie-hellman-group14-sha1,diffie-hellman-group1-sha1                                                                                                                                                                                                                                                                                                 
                                                                                                                                                                                                                                                                                                                                                                        
# Offer SHA1 signatures for host pubkey                                                                                                                                                                                                                                                                                                                               
HostKeyAlgorithms +ssh-rsa                                                                                                                                                                                                                                                                                                                                            
                                                                                                                                                                                                                                                                                                                                                                        
# Accept SHA1 signatures for client pubkey                                                                                                                                                                                                                                                                                                                            
PubkeyAcceptedAlgorithms +ssh-rsa    

真正的解决方案是升级这个旧的 CentOS 7 衍生产品,但在这样做之前,我需要完成文件复制工作以完成几个测试。

因此,我正在寻找一个临时解决方案,修改 Rocky Linux 9.5 系统的配置以允许文件传输。有人知道应该进行哪些配置更改/添加吗?

ssh
  • 1 个回答
  • 228 Views
Martin Hope
Tom Bennett
Asked: 2025-02-11 12:46:33 +0800 CST

对伪 tty 分配感到困惑:ssh -t

  • 5

ssh -t我对这个选项的作用和原因感到困惑-t。我的理解是,如果我运行ssh -t program,ssh 将被强制分配一个伪 tty,它将键盘输入传递给program,并将program的输出传递给 stdout。

但看来我错了。例如,以下两个命令似乎功能相同,因为我可以使用其中任何一个与 rclone 进行交互操作,即使第一个命令强制它分配伪 tty,而第二个命令强制它不分配伪 tty:

  1. ssh -t [email protected] rclone config
  2. ssh -T [email protected] rclone config

那么它ssh -t实际上做什么呢?

更新:

为了进一步阐明这个问题,我编写了下面名为的 Python 脚本hello.py。

import sys, signal

def signal_handler(sig, frame):
    print('You pressed Ctrl+C!')
    sys.exit(0)

signal.signal(signal.SIGINT, signal_handler)

print(f"stdin is tty:{sys.stdin.isatty()}")
print(f"stdout is tty:{sys.stdout.isatty()}")

s = input("Enter what you want:")
print("Hello ", s)

在远程机器上,如果我以 方式调用它,我会得到以下输出:ssh -t [email protected] "python hello.py"

stdin is tty: true
stdout is tty: true
Enter what you want: cat
Hello cat

如果我将其作为 调用,则会得到以下内容:ssh -T [email protected] "python hello.py"

stdin is tty: false
stdout is tty: false
Enter what you want: cat
Hello cat

无论哪种情况,我都可以通过在键盘上输入“cat”来与程序进行交互。

我观察到的一个区别是,当我按下 CTRL-C 时,-t版本捕获 SIGINT,但-T版本没有。

我很好奇为什么即使 stdin/stdout 不是 tty,我仍然可以与它交互。此外,isatty()它实际上是一个标准 C 库函数。这里的 (伪) TTY 到底是什么意思?

ssh
  • 1 个回答
  • 36 Views
Martin Hope
pppp12
Asked: 2025-02-06 20:08:24 +0800 CST

如何配置 PAM 以从 locallan 使用(仅密码)和从任何其他 IP 地址使用(密码和 OTP)验证 SSH 登录?

  • 7

我的目标是在从本地网络外部连接时实现 2FA(密码 + OTP)SSH 登录,而从本地网络(192.168.1.0/24)使用“仅密码”SSH 登录。

目前,我有第一位(密码+OTP)并使用以下配置:

我的/etc/ssh/sshd_config:

KbdInteractiveAuthentication yes
UsePAM yes

我的/etc/pam.d/sshd:

#@include common-auth
auth    required     pam_unix.so nullok_secure
auth    required     pam_oath.so usersfile=/etc/users.oath window=30 digits=6

如何从本地网络获取第二位(仅密码,无 OTP)?

提前致谢!

ssh
  • 1 个回答
  • 109 Views
Martin Hope
DaveL17
Asked: 2024-11-21 00:46:02 +0800 CST

Unifi Cloud Key Gen 1 SSH 带公钥认证

  • 5

我正在尝试配置我的 Gen 1 Cloud Key (CK) 以允许无密码身份验证,这样我就可以运行 bash 脚本来下载自动备份文件。我能够“手动”通过 SSH 进入 CK,也可以使用用户名/密码通过 bash 脚本进入,但这会以明文形式存储凭据,而我(显然)不想这样做。

我有:

  • 在我的本地机器(MBP Sequoia 15.1.1)上使用以下方式生成密钥ssh-keygen -t rsa:
  • 将公钥复制到 CK~/.ssh/authorized_keys文件中,
  • 修改/etc/ssh/sshd_config为包含以下(未注释的)行:RSAAuthentication yes,,PubkeyAuthentication yes和AuthorizedKeysFile .ssh/authorized_keys,
  • 使用 重启 CK 上的 ssh sudo systemctl restart sshd,
  • chmod 700 ~/.ssh使用和检查权限chmod 600 ~/.ssh/authorized_keys。

但还是没有惊喜。SSH 日志显示,

...
debug1: Next authentication method: publickey
debug1: get_agent_identities: bound agent to hostkey
debug1: get_agent_identities: ssh_fetch_identitylist: agent contains no identities
debug1: Will attempt key: /Users/Hank/.ssh/id_rsa RSA SHA256:KEY_VALUE_REDACTED
debug1: Will attempt key: /Users/Hank/.ssh/id_ecdsa 
debug1: Will attempt key: /Users/Hank/.ssh/id_ecdsa_sk 
debug1: Will attempt key: /Users/Hank/.ssh/id_ed25519 
debug1: Will attempt key: /Users/Hank/.ssh/id_ed25519_sk 
debug1: Will attempt key: /Users/Hank/.ssh/id_xmss 
debug1: Will attempt key: /Users/Hank/.ssh/id_dsa 
debug1: Offering public key: /Users/Hank/.ssh/id_rsa RSA SHA256:KEY_VALUE_REDACTED
debug1: send_pubkey_test: no mutual signature algorithm
debug1: Trying private key: /Users/Hank/.ssh/id_ecdsa
debug1: Trying private key: /Users/Hank/.ssh/id_ecdsa_sk
debug1: Trying private key: /Users/Hank/.ssh/id_ed25519
debug1: Trying private key: /Users/Hank/.ssh/id_ed25519_sk
debug1: Trying private key: /Users/Hank/.ssh/id_xmss
debug1: Trying private key: /Users/Hank/.ssh/id_dsa
debug1: Next authentication method: password
[email protected]'s password: 
...

所以我还是会被提示输入密码。我相信问题的线索就在于这一行:

没有相互签名算法

这是否意味着两个设备上的 SSH 实例不兼容,因此无法使用基于密钥的身份验证?这似乎很简单,但有些地方不太对劲。

TLDR;Unifi 控制器软件支持基于 SSH 密钥的身份验证,但这仅适用于连接到 AP、交换机和路由器等网络设备。CK 是一个客户端,显然无法通过控制器软件实现我的目标。

围绕这种方法有相当多的讨论,但似乎没有什么能够解决这个特定的问题。


编辑:我确实发现了这一点,这让我相信我的 CK(诚然,它很古老)可能是问题的根源。在 CK 上升级 ssh,虽然理论上可行,但并不是一个最佳解决方案,因为我预计未来的固件升级会覆盖任何中间更改。

答案是使用 RSA 以外的其他东西吗?


EDIT2:解决方案-FTF,以下是在我的案例中起作用的修订命令:

  • 生成密钥对:ssh-keygen -t ed25519
  • 将公钥复制到服务器:ssh-copy-id -i ~/.ssh/id_ed25519.pub [email protected]
  • 检查权限:chmod 700 ~/.ssh和chmod 600 ~/.ssh/authorized_keys
  • 重新启动:(sudo systemctl restart sshd可能不需要)
ssh
  • 1 个回答
  • 26 Views
Martin Hope
Jonatan Öström
Asked: 2024-11-15 23:14:40 +0800 CST

传输大量文件到远程服务器存档

  • 5

在移动本地服务器之前,我需要进行约 1 TB 的临时备份,而我拥有的另一个存储位置是远程 HPC 集群,具有足够的存储配额,但文件数有上限,并且文件太多。在本地机器上创建 tar 文件太慢(写入速度?)。

那么我该如何将本地文件传输到远程 tar 文件呢?我原本打算在本地挂载远程文件系统(使用 sshfs?),然后使用类似(应该可以吧?)的方法。但是,不挂载的话能做到吗?也许可以使用、和 这样tar -cf /mnt/remote/backup.tar local_folder的魔法管道?sshscptar

如果我能让它工作,是否也可以像适当的备份解决方案一样使用更新的本地文件来更新远程档案?(这对于当前任务来说不是必需的。)

ssh
  • 2 个回答
  • 58 Views
Martin Hope
Paul
Asked: 2024-11-12 18:37:10 +0800 CST

在 CentOS 7 中自动终止废弃的 SSH 会话

  • 5

有时,由于各种原因,PyTTY 会与我的 CentOS 7 服务器上的 SSH 会话失去连接(PuTTY 有问题、SSH 服务器有问题、路由器已重新启动、连接断开、电缆拔出等)。这些被放弃的会话会给服务器带来负担并消耗资源。是否可以将 CentOS 7 SSH 服务器配置为在 24 小时后自动终止任何 SSH 会话,无论会话目的和状态如何?

为什么要不管会话目的和状态?因为在我看来,有时很难区分正常会话和放弃的会话。

ssh
  • 1 个回答
  • 27 Views

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    新安装后 postgres 的默认超级用户用户名/密码是什么?

    • 5 个回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

    命令行列出 Windows Active Directory 组中的用户?

    • 9 个回答
  • Marko Smith

    什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同?

    • 3 个回答
  • Marko Smith

    如何确定bash变量是否为空?

    • 15 个回答
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    Noah Goodrich 什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent 如何确定bash变量是否为空? 2009-05-13 09:54:48 +0800 CST
  • Martin Hope
    cletus 您如何找到在 Windows 中打开文件的进程? 2009-05-01 16:47:16 +0800 CST

热门标签

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve