0.背景
在准备26考研,网站搁置的几个月,直到哥们的一个关于ssh免密连接的问题引起了我的兴趣。当我亲自实践,配置ssh免密连接时,确实遇到了很多问题。现在将各个步骤进行一个总结备份,以备今后查找问题以及给其他人当作借鉴。
1.安装OpenSSH
进入设置 → 系统 → 可选功能 → 查看功能 → 查看可用功能
服务器安装 OpenSSH 服务器,客户端安装OpenSSH 客户端。
tips:部分Windows自带SSH,可忽略此步。
2.生成密钥对
SSH-keygen
客户端连续按三次空格,默认配置。密钥文件保存在C:\users\<用户名>\.ssh
id_ed25519是私钥,请保存好。id_ed25519.hub是公钥,后续需要上传至服务器。
tips:任何有关ssh相关命令无法执行,请检查ssh相关服务是否开启。windows服务相关配置不过多赘述。
3.配置服务器公钥文件(重要)
进入服务器,C:\ProgramData\ssh\sshd_config,务必检查如下配置
#删去前面#则为启用
#允许公钥认证
PubkeyAuthentication yes
#关闭密码认证
PasswordAuthentication no
#非管理员用户组的公钥储存位置,允许写入绝对地址
#默认为C:\users\<用户名>\.ssh\authorized_keys
AuthorizedKeysFile .ssh/authorized_keys
#允许ssh的权限组
#如果为管理员账户则默认在administrator,如果普通用户则需要添加至openssh users用户组
AllowGroups administrators "openssh users"
#如果ssh用户为管理员,公钥储存位置,允许写入绝对地址
#默认为C:\ProgramData\ssh\administrators_authorized_keys
Match Group administrators
AuthorizedKeysFile __PROGRAMDATA__/ssh/administrators_authorized_keys
重启sshd服务以应用修改
Restart-Service sshd
4.配置公钥文件(重要)
进入服务器,按照sshd_config配置文件,创建公钥文件(无后缀名)。例如管理员账户,则在C:\ProgramData\ssh文件夹下,创建administrators_authorized_keys文件。
复制客户端id_ed25519.hub的内容,确保其编码格式为UTF-8 无BOM,粘贴于administrators_authorized_keys,确保粘贴后公钥后面无换行。
右键administrators_authorized_keys,属性 → 安全 → 高级 ,按照如下要求修改权限。
①修改文件所有者为自己
②关闭继承
③确保权限条目有且仅有自己和System,并且取得完全控制权限。
到这之后,大部分情况已经可以通过ssh免密连接了,下面开始阐述特殊情况。
ssh username@host
*.Winserver下,ssh用户名的选择
部分启用了Active Directory并加入了域的Winserver服务器,请选择使用域用户名进行ssh连接。
此时,username会非常的长,我们可以配置C:\users\<用户名>\.ssh\config来简化ssh。
Host [自定义主机名]
HostName [连接地址]
User [登录服务器的账户名]
Port [端口号,不写默认是22]
之后我们可以通过简便指令来ssh连接。
ssh [自定义主机名]
**.Debug的方法
#客户端Debug则在客户端ssh后面添加参数-v
ssh -v username@host
#服务器Debug需要先关闭服务器sshd服务
Stop-Service sshd
#Debug
sshd -d
#此时使用客户端ssh连接服务器
ssh username@host
#记得重新启动服务器sshd
Start-Service sshd
***.vscode连接时卡在初始化的问题
进入vscode设置,找到Remote-SSH相关配置:
①Remote.SSH: Remote Platform,手动添加远程平台的系统。
C:\users\<用户名>\.ssh\config下Host的值即为Item的值,Value手动拉取选择服务器的操作系统。
②Remote.SSH: Use Local Server,取消勾选此设置。