通过密钥对访问SSH服务端

通常情况下,人们喜欢使用密码的方式访问 ssh 服务端,多半是因为设置密钥对比较复杂,以及在其他陌生的客户端的情况下,使用密码有更好的便捷性。

但是当处于固定客户端的情况下,仅仅设置一次密钥对就可以达到一劳永逸的效果。本文将简单记录在常见的操作系统下创建密钥对并连接 Linux 服务器。

SSH 和密钥对

SSH (Secure Shell) 是一种用于安全远程登录和管理网络设备的协议。它通过加密技术确保通信的安全性,常用于在不安全的网络中安全地访问远程服务器。

私钥 (Private Key):

  • 存放在本地计算机,必须妥善保管,不能泄露。
  • 用于解密通过公钥加密的数据,也可用于生成数字签名。

公钥 (Public Key):

  • 可以安全地共享给其他人或服务器。
  • 存放在远程服务器中,用于验证连接是否由对应的私钥拥有者发起。

密钥认证过程

  1. 生成密钥对:在本地生成公钥和私钥。
  2. 部署公钥:将公钥上传到远程服务器。
  3. 登录时验证:SSH 客户端用私钥对数据签名,服务器通过公钥验证签名是否有效。如果匹配,则允许登录。

在生成公钥和私钥时,常用的算法包括 RSAECDSAED25519DSA,该选择哪种算法呢?

算法密钥长度性能安全性兼容性推荐场景
RSA2048~4096 较快非常好需要广泛兼容性的场景
ECDSA256~512较好需要高效和地空间占用的场景
ED25519256 非常快很高较好新型主流系统
DSA1024较低较差干啥啥不行,扔了吧

显而易见,最好选择 ED25519 算法。

不同平台创建密钥对通过 SSH 访问 Linux(Debian 为例)

这里主要介绍通过 Windows 以及 MacOS 访问 Debian 服务器的方法。

Windows 10/11

在 Powershell 中执行以下命令生成密钥对,your_key_name 是创建的密钥的名字,用于辨别。

ssh-keygen -t ed25519 -f $env:USERPROFILE\.ssh\your_key_name

创建后,会提示输入 passphrase,一般情况下直接回车跳过就好。在 Windows 的用户文件夹中的.ssh 目录中,可以找到刚刚创建的密钥对,其中 key 是你自己的私钥,pub 是公钥,需要上传到你要连接的服务器。

然而 Powershell 并没有 ssh-copy-id 这种东西,所以我们使用这种方案:

cat "$env:USERPROFILE\.ssh\your_key_name.pub" | ssh -i "$env:USERPROFILE\.ssh\your_key_name" user@server "umask 077; test -d .ssh || mkdir .ssh ; cat >> .ssh/authorized_keys || exit 1"

其中,user@server 是你登陆服务器的用户名和地址,把里面对应的密钥名改成自己的。运行之后会要求输入密码,直接输入密码就好,之后使用如下命令就可以直接登录了。

ssh -i "$env:USERPROFILE\.ssh\your_key_name" user@server

如果你还是嫌麻烦每次都要输入私钥的地址,可以添加到 Powershell 的 fuction 中:

function your_alias_name {
ssh -i "$env:USERPROFILE\.ssh\your_key_name" user@server
}

之后直接通过 your_alias_name 在 Powershell 中执行就可以登录了。

MacOS Sequoia

理论上 Catalina 之后的版本都可以

在 MacOS 终端 zsh 中运行:

ssh-keygen -t ed25519 -f ~/.ssh/your_key_name

然后通过 ssh-copy-id 将公钥上传到服务器:

ssh-copy-id -i ~/.ssh/your_key_name.pub user@server

输入密码之后就完成了。你可以通过在终端中运行:

ssh -i "~/.ssh/your_key_name" user@server

直接登录。

为了简便操作,可以设置 alias 快速登录(在 MacOS Catalina 之后,终端默认使用 zsh,这里以 zsh 为例)。

vim ~/.zshrc

添加你的别名

alias server_name='ssh -i ~/.ssh/your_key_name user@server'

然后保存并生效

source ~/.zshrc

然后你就可以直接用 alias 别名来快速登录了!

暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇