前言

在刚接触到服务器的时候,一般都会采取密码登录,但每次登录服务器的时候都需要输入密码,体验很不好,而且相较于 SSH Key 不太安全,而使用 SSH Key 连接服务器可以省去每次输入密码的过程,包括使用 scp 进行文件的上传下载的时候也不需要手动输入密码了。

SSH Key

配置

生成的 SSH Key 默认存储在 ~/.ssh 目录下,可以使用 ls ~/.ssh 查看之前是否已经生成过 SSH Key,如果提示 No such file or directory 可以使用如下指令用于生成 SSH Key:

1
ssh-keygen

接着会询问保存文件的位置以及是否要设定 passphrase,如果设定了 passsphrase 那么每次使用该 SSH Key 的时候都需要输入这个 passsphrase,可以根据自己对安全性的需求设定,空白表示不设定。

如果采用默认的设置,那么会在 ~/.ssh 路径下生成两个 Key,一个私钥 id_rsa ,另一个公钥 id_rsa.pub,私钥需要好好保管。下面介绍两种将公钥设置到服务器上的方法:

使用 ssh-copy-id

如果操作系统中有 ssh-copy-id,那么可以直接使用以下命令设置:

1
ssh-copy-id -i ~/.ssh/id_rsa.pub username@server
  • username:连接服务器的用户名
  • server:服务器的域名或者 ip 地址
  • ~/.ssh/id_rsa.pub:默认的公钥地址,如果修改过 SSH Key 存储地址,请填写对应地址

复制公钥到服务器的 authorized_keys 中

1
ssh username@server 'mkdir -p ~/.ssh && cat >> ~/.ssh/authorized_keys' < ~/.ssh/id_rsa.pub

上述命令用于在远程服务器上创建 ~/.ssh 文件夹并用本机的公钥创建服务器上的 ~/.ssh/authorized_keys 文件,接着设置权限:

1
ssh username@server 'chmod 700 -R ~/.ssh && chmod 600 ~/.ssh/authorized_keys'

验证

经过上述的配置之后,可以再次进行 SSH 连接验证配置是否生效:

1
ssh username@server

如果不需要输入密码就能够连接服务器,说明设置生效。

更进一步

我们还可以对已配置的服务器进行命名,方便连接,比如生产服的服务器可以命名为 prod,测试服的服务器可以命名为 stage 等,只需要修改 ~/.ssh/config 文件即可:

1
2
3
Host prod
HostName XXX.XXX.XXX.XXX
User root

只需要修改 Host 字段为自己想要的内容即可,这时候就可以使用 ssh prod 来连接该台服务器了。