ssh 密钥在 shell 登录时有效,但拒绝运行屏幕

ssh 密钥在 shell 登录时有效,但拒绝运行屏幕

我正在使用带有 rsa 公钥的 ssh 从 Windows 登录到 centos7 系统。

如果我想要一个 shell 并运行,这可以正常工作

ssh <user>@<host>

现在我想在主机上使用屏幕,因此我尝试使用以下方式登录

ssh <user>@<host> "screen -r 6204"

其中 6204 是现有的屏幕会话。但如果我这样做,我会得到

警告:代理返回不同的签名类型 ssh-rsa(预期为 rsa-sha2-512)

必须连接到终端。

这是怎么回事?我可以修复两边的设置。

答案1

警告:代理返回不同的签名类型 ssh-rsa(预期为 rsa-sha2-512)

您可能正在使用 PuTTY 的“Pageant”的旧版本,它不会仔细查看收到的签名请求 - 它被要求使用一种算法进行签名,但却使用另一种算法。

在进行数字签名时(例如在 SSH 身份验证期间),首先使用一些哈希函数对要签名的数据进行哈希处理。当首次定义 SSHv2 时,它指定使用 SHA-1 作为ssh-rsa密钥 - 这在 1024 位 RSA 密钥成为常态时是有意义的,但此后已成为系统中的薄弱环节。

SSH 代理协议经过调整,不再定义第二个不兼容的 RSA 密钥类型,而是让客户端可以使用同一个 RSA 密钥向代理请求不同的签名类型。旧代理应以“无效请求”响应,客户端将重试,但 Pageant 检查不够仔细,只是使用错误的类型进行签名。

PuTTY 0.71 版已修复此问题。如果您想消除警告,升级PuTTY并重新启动 Pageant。

(当然,这也适用于其他 SSH 客户端,尽管我不记得 OpenSSH 本身受到影响。但无论如何,问题出在您使用的 SSH 代理上。)

必须连接到终端。

当您运行 时ssh <host>,客户端会请求服务器创建一个“伪终端设备”(/dev/pts/# 或 /dev/ttyp#,具体取决于操作系统)——远程程序随后会认为它正在与终端仿真器对话。pty 设备允许报告窗口大小(行×列)、将 LF 换行符转换为 CRLF 并反之,等等。

当你运行时ssh <host> <command>,客户端没有默认请求一个 pty 设备,因为在许多情况下它的功能是不需要的——转换层很容易破坏正在传输的数据。

但如果你尝试以这种方式运行交互式命令,使用-t选项重新启用伪终端模式:

ssh -t <host> "screen -r 6204"

相关内容