我正在使用带有 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"