前言
一般情况下,我们要链接服务器除了三方的GUI工具 如 xshell、finalshell外。
我们还会使用一些没有UI的终端去链接,比如windows的powerShell、mac的Terminal、ios的serverCat(非自带)和andriod的termius (非自带)等等。
我们买的服务器一般都预装了openSSH(以及其依赖和OpenSSL),它就是远程连接相关插件。
ssh不仅支持账号密码的连接方式,还支持更为优秀的密钥链接。
ssh的配置文件在 /etc/ssh/sshd_config
这个文件中,常见的配置如
...
Port 31825 # ssh 服务端口号
PermitRootLogin yes # 开启root账号
PasswordAuthentication yes # 允许账密登录
PubkeyAuthentication yes # 允许密钥登录
AuthorizedKeysFile .ssh/authorized_keys # 授信任的(公)密钥列表
ssh的账密登录还是挺简单,只需要在客户端上执行 ssh [email protected]
,即可发起 链接远端既服务器的请求(第一次登录时可能会询问你是否接受新的主机指纹,输入yes确认即可),但是缺点相对明显,每次ssh链接请求都需要输入密码,安全性不高,所以引出了我们接下来的 密钥登录。
客户端生成密钥
macOS和Linux通常自带OpenSSH,Windows在Win10以后,也自带OpenSSH,所以我们直接使用终端进行 密钥对
生成:
ssh-keygen
# 过程会产生一些交互,我们一路回车默认即可,但为了方便深入学习 我将交互询问记录下来了如下:
# Enter file in which to save the key:密钥存放地址,默认为当前用户目录下的.ssh文件夹下。
# Enter passphrase:保护私钥的密码,一般留空,直接和上面一样回车即可。
# Enter same passphrase again:确认私钥密码
最终会在会生一对密钥-> 公钥+私钥:
.
id_rsa:生成的私钥,保留在客户端即可,理应谁也不给。
id_rsa.pub:生成的公钥,打开后,复制内容,后文部署到服务器上(后边讲)。
服务端部署公钥
复制如上客户端生成的 公钥内容,到服务器的 ~/.ssh/authorized_keys
文件中。
如果你要是嫌手动麻烦,客户端可以使用 ssh-copy-id user@serverIp
将自己的公钥推送到服务端,不过这个过程需要输入服务端的密码。
客户端链接服务端
此时,直接在客户端输入链接服务端的ssh请求,将不会再弹出输入密码的请求,而是直接链接上,如
ssh [email protected]
总结
客户端创建密钥对,将其中的公钥给远程端(远程端并将其放入自己的好友管理中[authorized_keys]),后续客户端就可以控制远程端了。
拟人化来说就是 相当于你客户端提前给远程端递了个名片认识了下,后续客户端直接就找远程端办事了。
参考
https://mintimate.cn/2021/12/03/connectToLinux
https://blog.csdn.net/h1008685/article/details/137458453