安装
现在 Win10 已经自带 ssh,可通过以下命令对安装的 ssh 进行操作。
检查安装状态:
Get-WindowsCapability -Online | ? Name -like 'OpenSSH*'
# This should return the following output:
Name : OpenSSH.Client~~~~0.0.1.0
State : NotPresent
Name : OpenSSH.Server~~~~0.0.1.0
State : NotPresent
安装:
# Install the OpenSSH Client
Add-WindowsCapability -Online -Name OpenSSH.Client~~~~0.0.1.0
# Install the OpenSSH Server
Add-WindowsCapability -Online -Name OpenSSH.Server~~~~0.0.1.0
# Both of these should return the following output:
Path :
Online : True
RestartNeeded : False
卸载
# Uninstall the OpenSSH Client
Remove-WindowsCapability -Online -Name OpenSSH.Client~~~~0.0.1.0
# Uninstall the OpenSSH Server
Remove-WindowsCapability -Online -Name OpenSSH.Server~~~~0.0.1.0
Windows 10 系统自带的 SSH 体验上并不太好,若安装了 Git,则可以使用 git 客户端自带的 ssh 工具进行相关操作;若系统安装了 WSL,尽量在 WSL 中进行相关操作。
免密登录
生成公钥:
$ ssh-keygen
运行上面的命令以后,系统会出现一系列提示,可以一路回车。其中有一个问题是,要不要对私钥设置口令(passphrase),如果担心私钥的安全,这里可以设置一个。
运行结束以后,在 ~/.ssh/
目录下,会新生成两个文件: id_rsa.pub
和 id_rsa
。前者是你的公钥,后者是你的私钥。
这时再输入下面的命令,将公钥传送到远程主机 host
上面:
$ ssh-copy-id user@host
注意 windows 主机上虽然支持 ssh
命令,但是不支持 ssh-copy-id
,这时候需要手动执行操作,将 ~/.ssh/id_rsa.pub
公钥追加到远程主机的 ~/.ssh/authorized_keys
文件中。
别名登录
即使免密登录,每次需要输入 user
、 host
、 port
等信息也比较麻烦,我们可以配置别名来简化登录输入的命令。配置别名只需要编辑 ~/.ssh/config
文件添加如下类似文件即可:
Host test_alias
HostName 192.168.1.1
Port 22
User root
Host other_alias2
HostName 192.168.1.1
Port 22
User root
IdentityFile ~/.ssh/id_rsa.pub
IdentitiesOnly yes
其中:
HostName
- 指定登录的主机名或IP地址Port
- 指定登录的端口号User
- 登录用户名IdentityFile
- 登录的公钥文件IdentitiesOnly
- 为yes
表示只接受 SSH key 登录
我们可以依次配置多个目的机多个别名。若务必要尽量不要设置上 IdentityFile
参数,容易出现错误。这样我们就可以使用 ssh <Host>
登录目的主机,这里使用 ssh test_alias
。
如果你的客户机是 Linux 或者 WSL,也可以使用 Linux 别名功能来方面我们登陆目的机:
alias webserver='ssh sk@192.168.225.22'
alias dns='ssh root@server.example.com'
alias dhcp='ssh ostechnix@192.168.225.25 -p 2233'
alias ubuntu='ssh senthil@192.168.225.50 -i ~/.ssh/id_rsa_remotesystem'
登录到指定路径
可以使用如下命令在登录时直接 cd
到指定路径:
$ ssh root@192.168.1.1 'cd /usr/local/mrp; $SHELL'
如果使用别名配置,可以在别名配置文件修改配置文件,添加两个参数 RemoteCommand
和 RequestTTY
:
Host test_alias
HostName 192.168.1.1
Port 22
User root
RemoteCommand cd /usr/local/mrp; $SHELL
RequestTTY force
注意添加上述参数后, scp
和 rsync
命令中无法使用别名,否则报错!