ssh介绍

February 01, 2022

我们经常使用ssh来下载github/gitlab 仓库或者实现免密登录远程服务器。这篇文章会介绍一些关于ssh的细节。

非对称加密

使用非对称加密算法(比如RSA算法)可以生成一对具有数学关联的密钥,也就是公钥和私钥。公钥可以用来加密数据,只有与其对应的私钥可以解秘数据。而且公钥不能推出私钥。

Alice 和 Bob要发送消息,那就首先两人都生成 各自的 密钥对。两人都将自己的公钥告知对方。当Alice 发送信息给 Bob时,Alice 会使用 Bob的公钥对数据加密,然后将加密的文件发送给Bob,Bob则可以使用自己的私钥将文件解密。由于公钥和私钥的特性,只有Bob可以揭秘Alice发送的信息,即使是Alice也无法揭秘,因为她没有Bob的私钥。所以Alice和Bob钥保存好自己私钥。

非对称加密在 SSL,SSH, PGP, GPG中均有应用

ssh

通过 ssh 登录服务器,比如 ssh root@11.22.33.44 即可以root用户登录ip为 11.22.33.44服务器。这时候,会要求我们输入密码。然而如果我们有很多服务器,每个服务器密码都不一样,岂不是很麻烦,而且同一个服务器密码也可能会换。这时候我们就会使用到ssh 免密登录。要想做到免密登录,就要在本机上先生成密钥对。

  1. 使用 ssh-keygen生成密钥对
ssh-keygen

不带任何参数,一路回车将会生成一组密钥对在 ~/.ssh/目录下。

当然也可以给 ssh-keygen指定一些参数,-t指定算法,-C添加注释

ssh-keygen -t ed25519 -C "your_email@example.com"

ssh-keygen 默认生成的密钥对名是 id_rsa,当然也可以自己指定。待ssh-keygen执行完成之后,可以看到 id_rsahe id_rsa.pub两个文件,这两个文件分别是这个密钥对的私钥和公钥。

  1. id_rsa.pub文件内容复制到目标服务器~/.ssh/authorized_keys文件中

    注意,这里要放到你要登录的用户的用户目录下,比如你想以root用户登录,那就要添加到 /root/.ssh/authorized_keys中,如果是以 jack用户登录,就要添加到 /Users/jack/.ssh/authozied_keys 中。

    可以现在本机使用 cat命令查看 公钥,将内容复制到粘贴板上,再登录服务器,将公钥粘贴到 authozied_keys文件中(如果没有的话,就需要手动创建)

    也可以使用 ssh-copy-id -i ~/.ssh/id_rsa.pub root@11.22.33.44将公钥内容写到目标服务器的.ssh目录下

  2. 在本机使用 ssh root@11.22.33.44登录,就不需要密码了

有时候本机会有几个密钥对,而ssh root@11.22.33.44 默认会使用id_rsa这个密钥对。如果你设置在服务器上authorized_keys上的公钥不是id_rsa.pub的话,会发现免密登录失效了。这时候就需要我们通过 -i参数指定密钥来进行ssh登录,假如前面的步骤我们生成的密钥对是 testtest.pub,我们已经将test.pub粘贴到服务器的.ssh目录下了,此时 可以通过ssh -i ~/.ssh/test root@11.22.33.44 指定使用 test密钥进行加密发送。

然而这样每次都要指定也很麻烦,可以参考在本机~/.ssh/config配置ssh 登录

Host tengxunyun
HostName 11.22.33.44
User root
IdentityFile ~/.ssh/ecs_rsa

这样之后就可以直接ssh tengxunyun 登录服务器了。是不是一下子方便了很多呢?

除了上面提到的这些配置登录信息的字段外,还可以配置ssh保持连接,防止断掉

Host *
ServerAliveInterval 30
TCPKeepAlive yes
ServerAliveCountMax 6
Compression yes

更多配置可以通过man ssh config查阅。

sshd

sshd是服务器端ssh的守护进程,可以做一些ssh登录配置,其配置文件在/etc/ssh/sshd_config

# 禁用密码登录
PasswordAuthentication no
ChallengeResponseAuthentication no

# 调整ssh连接保持时间
ClientAliveCountMax 300
ClientAliveInterval 0

参考

  1. 四分钟搞明白非对称加密
  2. SSH Config 那些你所知道和不知道的事
  3. ssh免密登的原理
  4. sshd_config配置详解
  5. github doc

Profile picture

Written by Colgin who lives and works in China, focus on web development. You can comment on github