跳转至

Ubuntu 使用ssh密钥登录服务器\#

介绍如何快速在Linux系统上生成密钥,并且使用其与GitHub进行通信

流程\#

  1. 使用ssh-keygen命令生成ssh密钥,采用ed25519算法
  2. 密钥的保存位置在/home/usrname/.ssh/目录下,如果没有这个目录就创建一个
  3. 将公钥保存在服务器上,如果需要,为私钥提供读写权限
  4. 添加私钥路径在config

具体操作\#

生成密钥\#

首先生成密钥:

ssh-keygen -t ed25519 -C "any words that you want to keep"
>>
Generating public/private ed25519 key pair.
Enter file in which to save the key (/home/kihara/.ssh/id_ed25519):

这里提示保存的文件路径,如果使用默认的名称则会以id_ed25519保存,这有可能会覆盖之前以同样方式生成的密钥

这一步我们就得到了公钥和私钥,有.pub的是公钥,我们需要把公钥上传到服务器

上传服务器\#

对于一般的服务器,我们可以以这样的方法上传:

ssh-copy-id -i ~/.ssh/<公钥> username@ip

这里的-i参数表示 identity file,用以验证身份

上传至服务器的具体操作看下面的视频有详细讲解:

上传Github\#

对于上传GitHub的密钥,需要在https://github.com/settings/profile上的SSH and GPG keys栏中添加新的 SSH key

复制公钥

cat github_key.pub

在macOS上也可以这样直接将文本内容复制到剪贴板

pbcopy <  ~/.ssh/github_key.pub

将显示的公钥复制到GitHub上保存

现在,GitHub服务器就知道我们的公钥了,我们可以通过上面的-i参数来传递私钥访问GitHub服务器,但是这还是有点麻烦,现在在.ssh目录下创建config文件(如果没有的话)

vim config

在文件中添加私钥路径IdentityFile ~/.ssh/github_key,或者可以用下面的命令

echo "IdentityFile ~/.ssh/github_key" >> config

这样,我们在进行ssh的时候就会自动读取私钥

$ ssh -T git@github.com
The authenticity of host 'github.com (20.205.243.166)' can't be established.
ED25519 key fingerprint is SHA256:+DiY3wvvV6TuJJhbpZisF/zLDA0zPMSvHdkr4UvCOqU.
This key is not known by any other names
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
Warning: Permanently added 'github.com' (ED25519) to the list of known hosts.
Hi Kihara-Ri! You've successfully authenticated, but GitHub does not provide shell access.

阿里云服务器\#

在阿里云服务器中,有一个.pem的密钥文件,我们从密钥对中生成,然后下载到本地,将这个文件保存到.ssh目录下,现在它的名字是cloudware_WSL.pem

然后,我们还要给这个密钥文件读写权限:

sudo chmod 600 cloudware_WSL.pem

这个命令表明只有文件拥有者拥有读写权限

最后将ssh信息加入到config文件中:

cat <<EOF >> config
Host cloudware
  HostName <ip>
  User root
  Port 22
  IdentityFile /home/kihara/.ssh/cloudware_WSL.pem
EOF

现在我们只需要输入服务器的Host名称就可以正常访问了!

ssh cloudware