安装 Win32-OpenSSH

  • 下载最新的发布版本 https://github.com/PowerShell/Win32-OpenSSH/releases
  • 解压到 C:\Program Files\OpenSSH
  • 可以将该目录加入 Path
  • 以管理员权限安装 SSHDssh-agent 服务 :

    powershell.exe -ExecutionPolicy Bypass -File install-sshd.ps1

  • 生成 Server Keys 并且限制这些文件的访问权限 , 以管理员权限运行 :

    .\ssh-keygen.exe -A powershell.exe -ExecutionPolicy Bypass -File .\FixHostFilePermissions.ps1 -Confirm:$false

  • 在 Windows 防火墙中为 SSH 服务器开启一个 port:

    • 可以执行如下命令 :

    New-NetFirewallRule -Protocol TCP -LocalPort 22 -Direction Inbound -Action Allow -DisplayName SSH

    • 或者直接在防火墙图形界面中增加一个 port 22 的规则 。
    • 开启服务 :

    net start sshd

    • 设置默认开启服务

    Set-Service sshd -StartupType Automatic Set-Service ssh-agent -StartupType Automatic

  • 设置默认 ssh Shell: 在服务器端的 windows registry 中设置 ssh 的默认 shell,

    Computer\HKEY_LOCAL_MACHINE\SOFTWARE\OpenSSH\DefaultShell

    registry

设置使用 SSH 秘钥登陆

安装后 , 可以直接使用用户名和密码方式从 client 登陆到 host 上 :

ssh user@host

要使用密匙登陆需要采用以下步骤来设置 :

在 client 端 :

  1. 生成 key pair ( 即 private client key 和 public client key)

  2. $HOME 中建立 .ssh 目录

    mkdir $HOME\.ssh cd $HOME\.ssh

  3. 生成 key pair

    ssh-keygen -t rsa -f id_rsa

id_rsa 为 key 文件名 , 生成时会提示输入 passphrase 来保护 private key, 也可以为空 。

  1. 在 ssh-agent 上注册 private key

  2. 运行源码中的 FixUserFilePermissions.ps1 来对进行权限设置

    FixUserFilePermissions.ps1

  3. 开启 ssh-agent:

    net start ssh-agent

  4. 将 key 注册到 ssh-agent

    ssh-add id_rsa

  5. 使用 private key 来登陆 host

    ssh -i .\id_rsa user@host

在服务器端

  1. 同样在服务器端的用户目录 $HOME 下建立 .ssh\, 并在其中建立 authorized_keys 文件 :

    touch .ssh\authorized_keys mkdir .ssh\other_keys

    将之前客户端上生成的 public client key 即 id_rsa.pub 文件 , 发送到 host 上的 $HOME\.ssh\other_keys\ 文件夹下 , 在服务器上 , 将这个 id_ras.pub 内容写入 authorized_keys 文件中 。

    cat .\other_keys\id_rsa.pub > authorized_keys

    authorized_keys 文件的编码要为 UTF-8, 而非 windows 默认编码

  2. 设置 authorized_keys 的访问权限

    FixUserFilePermissions.ps1


Comments

comments powered by Disqus
share -