Windows&Linux SSH免密公钥登录
通常情况下,使用SSH进行远程连接时使用密钥登录能够保障安全性,同时能够避免每次连接都输入密码。本文总结了Windows/Linux主机间建立SSH免密公钥登录的三种情况。
免密公钥登录的原理
- 客户端向服务器发起 SSH 登录请求。
- 服务器收到用户的SSH 登录请求,发送随机字符串给用户,要求用户证明自己的身份。
- 客户端收到服务器发来的数据,使用私钥对数据进行签名加密,然后再发送给服务器。
- 服务器收到客户端发来的加密签名后,使用本地保存的对应公钥进行解密,然后跟原始字符串比较。如果一致,就允许用户登录。
Windows to Windows SSH
1. OpenSSH客户端/服务器安装
以管理员权限启动PowerShell,输入:
1 | |
2. 本地生成密钥并上传公钥
本机密钥默认生成在C:\Users\LOCAL_username\.ssh\文件夹下,例如以RSA类型会生成公钥id_rsa.pub和私钥id_rsa,其中公钥需要上传到服务器的C:\Users\REMOTE_username\.ssh\authorized_keys文件夹(可能需要mkdir)中:
1 | |
3. 远端服务器ssh配置
使用icacls命令,为远端服务器上的authorized_keys文件配置正确的权限,其对应操作含义分别为移除不必要的继承权限、授予管理员用户完全控制权限、授予 SYSTEM 用户的完全控制权限,以确保服务可以访问。
1 | |
在Windows OpenSSH中,默认的授权密钥存放位置为C:\ProgramData\ssh\administrators_authorized_keys,此位置对应管理员组权限。通常Windows用户属于该组,因此需要修改默认授权文件位置,需要编辑服务器配置文件C:\ProgramData\ssh\sshd_config,其中C:\ProgramData为隐藏文件夹,需要开启资源管理器的隐藏文件夹显示,或是直接将上述路径输入到搜索导航栏中。sshd_config文件中进行以下修改:
1 | |
然后重启sshd服务:
1 | |
Windows to Linux SSH
主要流程相似,包括生成密钥、上传公钥、修改sshd配置文件,注意Linux文件系统与Windows有区别,Linux系统配置文件在/etc/ssh/sshd_config目录下,授权密钥文件在/home/USERNAME/.ssh目录下。
可通过以下操作修改authorized_keys权限:
1 | |
Linux环境下,重启sshd服务:
1 | |
Linux to Linux SSH
主要流程相似,包括生成密钥、上传公钥、修改sshd配置文件,注意Linux文件系统与Windows有区别,Linux系统密钥对文件在/home/USERNAME/.ssh文件目录下。
另外,可以使用ssh-copy-id简化公钥拷贝流程:
1 | |