从 Windows PowerShell 到 Linux 服务器的 SSH 无法分配伪终端;“stdin 不是终端”

从 Windows PowerShell 到 Linux 服务器的 SSH 无法分配伪终端;“stdin 不是终端”

问题

我想通过使用 Visual Studio Code 的加载远程文件夹来在 digital ocean 中的 linux droplet 上处理代码项目远程 SSH 插件

在此期间,我正在尝试验证 powershell 是否可以连接到 SSH,以便我可以在 VSCode 上进行故障排除。

背景

  • 客户端是Windows 10 Home
  • 远程是 Ubuntu 20.04
  • ssh 位于C:\Windows\System32\OpenSSH\ssh.exe并且位于路径中
  • 同一台机器上的 WSL 可以通过 ssh 连接到远程机器

SSH 设置和问题

我已经运行了以下命令:

PS> Get-Service -Name ssh-agent | Set-Service -StartupType Automatic
PS> Start-Service ssh-agent
PS> ssh-add C:\path\wsl\folder\private.key
Enter passphrase for C:\path\wsl\folder\private.key:
Identity added: C:\path\wsl\folder\private.key (myserver.com)

运行 SSH 会生成一系列伪终端错误:

PS>  ssh [email protected]
Pseudo-terminal will not be allocated because stdin is not a terminal.
Pseudo-terminal will not be allocated because stdin is not a terminal.
Pseudo-terminal will not be allocated because stdin is not a terminal.
...

-T使用、-T -t和运行 ssh-tt会产生相同的结果。无论管理员状态如何,这都会在 powershell 5 和 6 上发生。

在这种状态下,我无法在远程机器上运行任何命令,并且没有迹象表明已建立连接。

问题

我如何通过 ssh 从我的 Windows 机器连接到我的 Linux droplet?

答案1

通过添加RequestTTY Yes到 ssh 配置文件解决了此问题。此文件%USERPROFILE%\.ssh\config在 Windows 上默认存储在Win32的OpenSSH

这是我当前的 ssh 配置:

Host myserver.com
  HostName myserver.com
  User me
  RequestTTY Yes

这也解决了我使用 Visual Studio Code 加载远程编码项目的问题。

相关内容