其他命令

其他命令

如何设置主机名和端口在 Windows 的配置文件中,OpenSSH通过 PowerShell 使用?

与 Unix/Linux 一样:

通过输入以下内容立即编辑或创建文件:

nano ~/.ssh/config

在这里,您可以设置特定于主机的配置选项。要指定新端口,请使用如下格式:

主机 remote_alias 主机名 remote_host 端口 port_num

这将允许您无需在命令行上指定特定的端口号即可登录。

https://www.digitalocean.com/community/tutorials/ssh-essentials-working-with-ssh-servers-clients-and-keys

答案1

在带有 PowerShell 的 Windows 10 中,不会创建配置文件,因此我们必须自己创建。

这个答案是通过以下方式完成的:Windows 10 PRO 20H2(内部版本 19042.804)
并且最新的 OpenSSH-Portable (v8.1.0.0p1-Beta)来自官方 GitHub这里

注 1: 这里我仅展示如何配置配置文件“config”在文件夹中.ssh,它应该位于用户文件夹中$HOME\.ssh,因为它是必需的,通常,在我看来,其他文件是在安装 Open-SSH 服务器时自动创建的。如果不是这种情况,只需调整命令行

笔记2拥有适用于 Windows 的 Git 和 OpenSSH-portable 可能会导致代理配置出现问题,因此您应该知道它是 Windows 服务使用的 SSH-Agent

您可以使用以下命令找出 Windows 服务使用了哪个 ssh-agent:

Get-WmiObject win32_service | ?{$_.Name -like 'ssh-agent'} | select PathName

如果该Get-WmiObject命令不再起作用,你可以使用该Get-CimInstance命令,该命令应该是新版本 PowerShell 的最终继任者


# Create the config file with Powershell
New-Item -Path $HOME\.ssh\config -ItemType File

# Open config File with Notepad
C:\WINDOWS\System32\notepad.exe $HOME\.ssh\config

# or Open file with Visual Code
code $HOME\.ssh\config

之后,你可以使用与 Linux 相同的语法根据需要配置 SSH 配置文件

小例子

在上一步创建的文件中config添加以下文本:

# Config for use specific key for github
Host github.com
  HostName github.com
  User git
  IdentityFile ~/.ssh/id_ed25519_github
  IdentitiesOnly yes

# For server 172.x.x.x
Host 172.x.x.x
  User user
  Port 2121
  IdentityFile ~/.ssh/id_ed25519
  IdentitiesOnly yes

# For all other servers
Host *
        User root

现在您可以按如下方式测试您的配置:

# For Github

ssh -T [email protected]

# For other
# It is possible not to put the user to check,
# if you have indicated a specific user
# in the conf file, to test if the configuration
# will connect well with this user

ssh -T 172.x.x.x

如果 ssh 不起作用,这是因为你的环境变量中没有 OpenSSH 文件夹,你可以像在 Powershell 中一样将其添加到系统环境变量中(如果你安装了
OpenSSH 二进制文件目录:
文件夹名称为OpenSSH-Win64

# PowerShell admin
# Add folder OpenSSH to your System Environnement
[System.Environment]::SetEnvironmentVariable('OPENSSH', 'C:\Program Files\OpenSSH-Win64', [System.EnvironmentVariableTarget]::Machine)

其他命令

# Generate EdDSA Key
ssh-keygen.exe -t ed25519 -a 100 -o -C "[email protected]" -f "$HOME\.ssh\id_ed25519_example.com"

# Config the SSH Agent service
# For start the service when logon
Set-Service ssh-agent -StartupType Automatic

# Start the SSH Agent
Start-Service ssh-agent

# Restart service always when you change the config file
Restart-Service ssh-agent

# Add the key to the SSH Agent
ssh-add $HOME\.ssh\id_ed25519_example.com

答案2

OpenSSH 配置和密钥文件(包括configknown_hostsauthorized_keysid_rsa等),在 *nix 上位于~/.sshWin32的OpenSSH他们去了%USERPROFILE%\.ssh

通常是:

C:\Users\username\.ssh

答案3

简单回答问题“Windows OpenSSH CLIENT 的配置文件位于哪里?”

对于 Openssh windows 客户端 目录:\ProgramData\ssh\ssh.config

请注意,此文件不会自动创建,您可以自行创建。该文件类似于sshD配置文件它也位于那里但是针对 Windows 上的 OpenSSH 服务器进行配置。

另请注意,密码和密钥设置为默认无,因此至少需要在ssh 配置文件:(+ 表示添加到任何现有条目):

Ciphers +aes128-cbc,aes256-cbc,3des-cbc
KexAlgorithms +diffie-hellman-group1-sha1
HostkeyAlgorithms +ssh-rsa

以上设置适用于 Cisco SSH 客户端到 Win SSH 服务器以及 Win SSH 客户端到 Cisco SSH 服务器。对于其他情况,您需要查看在发出缺少密码和密钥的 SSH 命令时返回的错误。

例如,在 Win SSH 客户端上:

PS C:\Users\poh> ssh 192.168.111.2

Unable to negotiate with 192.168.111.2 port 22: no matching key exchange method found. Their offer: diffie-hellman-group1-sha1

在 Cisco SSh 服务器上:(使用命令 - debug ip ssh all)

*Mar  1 12:31:59.020: SSH2 0: no matching cipher found: client [email protected],aes128-ctr,aes192-ctr,aes256-ctr,[email protected],
*Mar  1 12:31:59.128: SSH0: Session disconnected - error 0x00

因此根据错误,Win 客户端需要 ssh.config 文件中的条目:

KexAlgorithms +diffie-hellman-group1-sha1

答案4

OpenSSH 安装后,执行一些额外的配置步骤。

确保 OpenSSH 文件夹包含在系统路径环境变量中:

C:\Windows\System32\OpenSSH\如果作为 Windows 可选功能安装 C:\Program Files\OpenSSH\如果通过 OpenSSH 下载安装 将两个服务设置为自动启动:

# PowerShell Admin
# Config services sshd and ssh-agent
# for start automatic when logon
Set-Service sshd -StartupType Automatic
Set-Service ssh-agent -StartupType Automatic

如果您安装了具有可选功能的 OpenSSH,则 Windows 将创建一个新的防火墙规则,以允许通过端口 22 进行 SSH 的入站访问。如果您从下载中安装了 OpenSSH,则使用以下命令创建防火墙规则:

# PowerShell Admin
# Add FireWall Rules for OpenSSH Server
New-NetFirewallRule -Name sshd -DisplayName 'OpenSSH Server (sshd)' `
-Enabled True -Direction Inbound -Protocol TCP `
-Action Allow -LocalPort 22

启动 sshd 服务以生成 SSH 密钥:

# PowerShell Admin
Start-Service sshd

SSH 密钥和配置文件位于 中C:\ProgramData\ssh,这是一个隐藏文件夹。SSH 使用的默认 shell 是 Windows 命令 shell。这需要更改为 PowerShell:

# PowerShell Admin
New-ItemProperty -Path "HKLM:\SOFTWARE\OpenSSH" -Name DefaultShell `
-Value "C:\Program Files\PowerShell\6\pwsh.exe" -PropertyType String -Force

现在,当您通过 SSH 连接到系统时,PowerShell Core 将启动并成为默认 shell。如果需要,您还可以将默认 shell 设为 Windows PowerShell。

Windows 上的 OpenSSH 有一个错误。它不适用于带空格的路径,例如 PowerShell Core 可执行文件的路径!解决方法是创建一个符号链接,该链接会创建 OpenSSH 可以使用的路径:

# PowerShell Admin
New-Item -ItemType SymbolicLink -Path C:\pwsh -Target 'C:\Program Files\PowerShell\6'

在 sshd_config 中文件中,取消注释以下行:

PubkeyAuthentication yes
PasswordAuthentication yes

在其他子系统行之前添加此行:

Subsystem  powershell C:\pwsh\pwsh.exe -sshs -NoLogo -NoProfile

这告诉 OpenSSH 运行 PowerShell Core。

注释掉以下行:

AuthorizedKeysFile __PROGRAMDATA__/ssh/administrators_authorized_keys

保存对 sshd_config 文件的更改后,重新启动服务:

# PowerShell Admin
Restart-Service sshd
Start-Service ssh-agent

对配置文件进行任何更改后,您需要重新启动 sshd 服务。

相关内容