首页 > 技术文章 > SSH免密登录云服务器记录

I-am-Sino 2022-03-09 19:14 原文

生成SSH密钥

首先检查在主机~/.ssh目录下查看是否存在id_rsaid_rsa.pub文件,若没有则采用下面的方法生成密钥。(若重装云服务器系统,则检查在known_hosts文件中删除对应ip相关的内容)

使用-t参数创建一个指定密钥的类型(rsa)并使用-C参数添加注释:

ssh-keygen -t rsa -C "zhangsan@gmail.com"

输入后会有如下提示:

Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa): 

第一行是提醒我们正在生成一对密钥;第二行则是让我们选择密钥存放的文件路径,通常我们都会选择使用默认路径,此时不用输入任何路径,直接回车即可;回车后终端给出如下提示:

Enter passphrase (empty for no passphrase): 

它提示我们输入一串密码短语,这里不输入任何值也不会影响生成结果,直接回车即可;回车后终端给出如下提示:

Enter same passphrase again:

这里是让我们再次输入一遍密码短语,免得我们在第一次输入的时候误操作。如果上一步没有输入值,那么这里也直接回车即可;回车后终端给出如下提示:

Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:/k7eBzEwIUHIjh0osGBEkoRMLKKbCV4XzyhHJ3ffsj0 zhangsan@gmail.com
The key's randomart image is:
+---[RSA 3072]----+
|%O   o o+...     |
|O+. .++o oo      |
|=  ..+O.. .o.    |
|o  o.+oo   oo.   |
|o+. +   S   +o   |
|+.     .   ..E   |
|        . .  ..  |
|         + .  .  |
|         .+ ..   |
+----[SHA256]-----+

从提示中我们可以看到密钥存放的文件路径,默认情况下公钥和私钥都存放在 ~/.ssh 目录下。

配置免密登录

将把主机下的id_rsa.pub复制到服务器下,在服务器的.ssh/authorized_keys文件里。
推荐采用命令方式,手动复制粘贴可能会有格式错误。

ssh-copy-id -i ~/.ssh/id_rsa.pub root@11.11.11.11

回车后输入云服务器的密码,会有类似如下提示:

~/.ssh » ssh-copy-id -i ~/.ssh/id_rsa.pub root@11.11.11.11                                                      zhaowenxu@SINO-Mac
/usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "/Users/zhaowenxu/.ssh/id_rsa.pub"
/usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed
/usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys
Password: 

Number of key(s) added:        1

Now try logging into the machine, with:   "ssh 'root@11.11.11.11'"
and check to make sure that only the key(s) you wanted were added.

此时便可以免密登录云服务器查看(若为第一次登录输入yes)


若经过上述配置依然需要输入密码。则检查下述内容:

注意一:

  • CentOS默认公钥登陆关闭状态需要开启
  • 修改配置文件:/etc/ssh/sshd_conf
    命令:
    vim /etc/ssh/sshd_conf
    
  • 找到下面两行注释将前面的#去掉并将后面的no改为yes
    RSAAuthentication yes
    PubkeyAuthentication yes
    
  • 重启sshd服务:
    systemctl restart sshd
    

免用户名和ip登录

虽然我们省去了输入密码的步骤,不过用户名和 IP 地址也不短。如果想要省略用户名和 IP 地址,可以通过配置~/.ssh/config实现。默认情况下~/.ssh目录下是没有config文件的。我们可以通过$ vim ~/.ssh/config创建。接着写入以下配置信息:

Host Sino
HostName 11.11.11.11
Port 22
User root
IdentityFile ~/.ssh/id_rsa

其中Host代表云服务器昵称、HostName为云服务器的公网 IP 地址、Port代表连接时使用的端口号、User代表连接时选用的用户名、IdentityFile代表本地私钥文件的路径。配置完成后退出编辑器,这时候我们就可以用云服务器昵称登录云服务器啦,在终端输入$ ssh Sino即可。

推荐阅读