安装

现在 Win10 已经自带 ssh,可通过以下命令对安装的 ssh 进行操作。
检查安装状态:

  1. Get-WindowsCapability -Online | ? Name -like 'OpenSSH*'
  2. # This should return the following output:
  3. Name : OpenSSH.Client~~~~0.0.1.0
  4. State : NotPresent
  5. Name : OpenSSH.Server~~~~0.0.1.0
  6. State : NotPresent

安装:

  1. # Install the OpenSSH Client
  2. Add-WindowsCapability -Online -Name OpenSSH.Client~~~~0.0.1.0
  3. # Install the OpenSSH Server
  4. Add-WindowsCapability -Online -Name OpenSSH.Server~~~~0.0.1.0
  5. # Both of these should return the following output:
  6. Path :
  7. Online : True
  8. RestartNeeded : False

卸载

  1. # Uninstall the OpenSSH Client
  2. Remove-WindowsCapability -Online -Name OpenSSH.Client~~~~0.0.1.0
  3. # Uninstall the OpenSSH Server
  4. Remove-WindowsCapability -Online -Name OpenSSH.Server~~~~0.0.1.0

Windows 10 系统自带的 SSH 体验上并不太好,若安装了 Git,则可以使用 git 客户端自带的 ssh 工具进行相关操作;若系统安装了 WSL,尽量在 WSL 中进行相关操作。

免密登录

生成公钥:

  1. $ ssh-keygen

运行上面的命令以后,系统会出现一系列提示,可以一路回车。其中有一个问题是,要不要对私钥设置口令(passphrase),如果担心私钥的安全,这里可以设置一个。
运行结束以后,在 ~/.ssh/ 目录下,会新生成两个文件: id_rsa.pubid_rsa 。前者是你的公钥,后者是你的私钥。

这时再输入下面的命令,将公钥传送到远程主机 host 上面:

  1. $ ssh-copy-id user@host

注意 windows 主机上虽然支持 ssh 命令,但是不支持 ssh-copy-id ,这时候需要手动执行操作,将 ~/.ssh/id_rsa.pub 公钥追加到远程主机的 ~/.ssh/authorized_keys 文件中。

别名登录

即使免密登录,每次需要输入 userhostport 等信息也比较麻烦,我们可以配置别名来简化登录输入的命令。配置别名只需要编辑 ~/.ssh/config 文件添加如下类似文件即可:

  1. Host test_alias
  2. HostName 192.168.1.1
  3. Port 22
  4. User root
  5. Host other_alias2
  6. HostName 192.168.1.1
  7. Port 22
  8. User root
  9. IdentityFile ~/.ssh/id_rsa.pub
  10. IdentitiesOnly yes

其中:

  • HostName - 指定登录的主机名或IP地址
  • Port - 指定登录的端口号
  • User - 登录用户名
  • IdentityFile - 登录的公钥文件
  • IdentitiesOnly - 为 yes 表示只接受 SSH key 登录

我们可以依次配置多个目的机多个别名。若务必要尽量不要设置上 IdentityFile 参数,容易出现错误。这样我们就可以使用 ssh <Host> 登录目的主机,这里使用 ssh test_alias

如果你的客户机是 Linux 或者 WSL,也可以使用 Linux 别名功能来方面我们登陆目的机:

  1. alias webserver='ssh sk@192.168.225.22'
  2. alias dns='ssh root@server.example.com'
  3. alias dhcp='ssh ostechnix@192.168.225.25 -p 2233'
  4. alias ubuntu='ssh senthil@192.168.225.50 -i ~/.ssh/id_rsa_remotesystem'

登录到指定路径

可以使用如下命令在登录时直接 cd 到指定路径:

  1. $ ssh root@192.168.1.1 'cd /usr/local/mrp; $SHELL'

如果使用别名配置,可以在别名配置文件修改配置文件,添加两个参数 RemoteCommandRequestTTY

  1. Host test_alias
  2. HostName 192.168.1.1
  3. Port 22
  4. User root
  5. RemoteCommand cd /usr/local/mrp; $SHELL
  6. RequestTTY force

注意添加上述参数后, scprsync 命令中无法使用别名,否则报错!