目录
简介
从Windows 10 1803版本开始,系统自带了OpenSSH Client(https://devblogs.microsoft.com/commandline/windows10v1803/),这让广大程序员朋友,尤其是经常操作Linux的IT从业者有了原生的访问服务器方法。然而在实践过程中本人遇到一些问题,随手笔记,希望能帮到同样遇到这些问题的朋友
开启ssh-agent服务
在系统默认状态,或安装某些更新之后,可能ssh-agent服务没有开启,这会影响通过密钥证书方式访问ssh服务器的这部分用户,导致无法连接,远端提示:Permission Deny。通常的解决办法是将本地的私钥加入到ssh代理中。命令为:
ssh-add %userprofile%\.ssh\id_rsa
但是运行后会提示:
Error connecting to agent: No such file or directory
此时只需要在“运行”(Win + R)中执行services.msc,找到名为:OpenSSH Authentication Agent的服务,将其启动类型设置为:“自动”,并且将其启动即可。
密钥文件访问权限问题
当尝试将私钥添加到ssh代理时,或许你会看到这样一个错误提示:
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@ WARNING: UNPROTECTED PRIVATE KEY FILE! @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
Permissions for 'C:\\Users\\someuser\\.ssh\\id_rsa' are too open.
It is required that your private key files are NOT accessible by others.
This private key will be ignored.
此时你应该考虑自己的密钥对权限设置过于宽松,会产生安全问题,最终导致本次私钥添加动作失败。设置密钥的宗旨是什么呢:
- 私钥:当前系统的SYSTEM,Administrators用户组,拥有该文件的完全控制权限;该文件的所有者拥有修改权限。
- 公钥:除去私钥的所有权限设置外,可以允许Everyone拥有读取和执行权限。
除去上述权限,其他权限一律取消,设置好之后就OK了。如果还是记不住怎么办呢?那就在系统中尝试使用:
ssh-kegen -t rsa -b 2048
来临时生成一个密钥对,然后分别点击私钥(id_rsa)和公钥(id_rsa.pub)文件来查看其属性的安全标签来确认如何设置。
关于多个密钥如何使用
如果你打算在访问不同远程服务器时使用不同的用户和私钥,那么可以将策略保存在%userprofile%\.ssh目录下,并以config作为文件名(没错,没有扩展名),文件权限与私钥权限设置一样。下面给出一个示例:
Host code.csdn.net
HostName code.csdn.net
User bob
PreferredAuthentications publickey
IdentityFile ~/.ssh/csdn.rsa
Host github.com
HostName github.com
User bob
PreferredAuthentications publickey
IdentityFile ~/.ssh/github.rsa
Host git.mycompany.com
HostName git.mycompany.com
User bob
PreferredAuthentications publickey
IdentityFile ~/.ssh/git_key.rsa
Host:要连接的远程服务器地址(IP或者域名、主机名);
HostName:含义同Host,与Host保持一致;
User:指登录远程服务器时使用的用户名;
PreferredAuthentication:优先使用的鉴权方式,这里填写固定的public(即:使用公钥鉴权);
IdentityFile:既然选择了公钥方式鉴权,则需要指定本地连接到远程时使用的对应私钥文件,所以在这里设置对应的私钥文件完整文件名即可(文件名可以使用“~”作为当前用户的home目录,也可以使用C:\\Users\\someuser\\.ssh\\id_rsa这样的绝对目录,但是要注意在Windows中请使用“\\”来转义目录分隔符“\”)。
注意:在上面的配置文件中Host对应下面的配置项有缩进,这个缩进使用tab或者空格都可以,没有具体要求。
关于多个服务器如何使用
如果你有一组服务器,想在自己的客户端通过同一个私钥进行访问,则可以通过Host通配的方式实现。
Host 192.168.1.*
User bob
Port 10086
IdentityFile ~/.ssh/cluster.rsa
经过上述通配设置后,通过客户端访问服务器192.168.1.1~255(假设子网掩码为24)将统一使用cluster.rsa私钥连接到服务器的10086端口。特别适合经过统一安全配置,改过SSH服务端口号的情况。
测试配置是否正确
ssh工具为我们提供了测试模式,来评估ssh配置是否能够真的连接到远程服务器。请使用如下命令(请根据实际情况替换user和host值):
ssh -T user@host
整个过程中出现任何配置问题都会在回显信息中反馈,帮助定位问题。