前言

网上的一些ssh免密连接linux服务器的资料都写的过于复杂,因此笔者写了一份简明的教程。

配置如下:

  • 客户端(发起SSH连接的一方):Mac Sonoma14.4.1
  • 服务器(接受SSH请求的一方):22.04.1-Ubuntu

简单SSH连接

基本的ssh命令格式如下:

1
ssh [用户名]@[主机地址]

例如,如果用户名是john,想要连接到主机地址为example.com的远程服务器,使用以下命令:

1
ssh john@example.com

这个命令会尝试以用户john的身份建立到example.com的SSH连接。如果连接成功,将需要提供密码(如果有的话),之后就可以开始远程操作该服务器了。

可以使用远程主机的IP地址来代替域名。例如,如果远程服务器的IP地址是192.168.1.100,可以使用以下命令:

1
ssh 用户名@192.168.1.100

SSH免密连接

基本概念

SSH免密连接需要在客户端生成公钥和私钥:

  • 公钥:公钥将复制到服务器一端。
  • 私钥:私钥要保存在客户端本地,也就是Mac上。

在SSH连接的时候,会根据公钥和私钥进行验证,具体的过程如下:

  • 服务器使用存储的公钥对客户端发送的认证请求进行加密,生成一个挑战(challenge)。
  • 客户端使用自己的私钥对挑战进行解密,然后将解密结果发送回服务器。
  • 服务器验证收到的解密结果是否与原始挑战匹配。如果匹配,服务器就知道客户端持有对应的私钥,因此认证成功

具体过程

省流

如果不想知道详细的过程,可以直接执行以下的命令:

首先在Mac终端上执行下面指令生成公钥秘钥:

1
ssh-keygen -t rsa -b 4096 -C "your_email@qq.com"

这里用任意邮箱替代"your_email@qq.com"即可。

然后在终端中,SSH连接到服务器上并进行一系列权限设置:

1
2
3
4
ssh [用户名]@[主机地址]
chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys
sudo chown [用户名]:[用户名] ~/.ssh/authorized_keys

在终端中,用exit退出SSH:

1
exit

在终端中,拷贝公钥到服务器~/.ssh/authorized_keys中。

1
ssh-copy-id [用户名]@[主机地址]

之后就可以用ssh免密登陆了

1
ssh [用户名]@[主机地址]

生成私钥与公钥

首先,打开Mac上的终端(Command+空格搜索终端即可)。然后输入:

1
ssh-keygen -t rsa -b 4096 -C "your_email@qq.com"
  • -t rsa:指定要创建的密钥类型。这里使用的是RSA算法,RSA是一种非对称加密算法,广泛用于SSH密钥生成。
  • -b 4096:指定密钥的长度。这里设置为4096位。密钥长度越长,安全性越高,但同时也会增加计算负担。4096位是一个当前普遍认为安全的长度。
  • -C "your_email@qq.com":添加注释。这里的注释是邮箱your_email@qq.com,这个注释会添加到公钥文件中,帮助识别密钥的拥有者。这通常用于当多个密钥存在时,区分不同的密钥。

这个秘钥会生成在你的Mac的用户名/.ssh文件夹下。

更改服务器中文件夹权限

更改.ssh文件夹权限

先使用密码手动登录到服务器上:

1
ssh [用户名]@[主机地址]

然后检查 .ssh 目录权限(之后要把公钥复制到.ssh/authorized_keys下)。

1
ls -ld ~/.ssh

会看到这样的输出:

1
drwxrwxr-x 2 node1 node1 4096  4月 20 20:47 /home/node1/.ssh

drwxrwxr-x:这部分表示文件(或目录)的权限。这里d表示这是一个目录。

  • 接下来的三个字符rwx表示目录所有者(user,这里是node1)的权限,
  • 再接下来的三个字符rwx表示所属组(group,这里也是node1)的权限。
  • 最后的三个字符r-x表示其他用户(others)的权限。

所以这里的意思是所有者和所属组有读写和执行权限,而其他用户有读和执行权限,但没有写权限。

.ssh 目录的权限过于宽松,任何用户都可以进入这个目录。所以更改一下其的权限,将 .ssh 目录的权限修改为只有所有者可以读写执行:

1
chmod 700 ~/.ssh

chmod(change mode): chmod 命令用于改变文件或目录的访问权限,权限设置使用符号表示法或八进制表示法。

更改.ssh/authorized_keys的权限

查看.ssh/authorized_keys的权限

1
ls -l ~/.ssh/authorized_keys

输出应该如下:

1
-rw-r--r-- 1 root root 96  3月 11 21:26 /home/node1/.ssh/authorized_keys

-rw-r--r--:这部分表示文件(或目录)的权限。

  • 这里-表示这是一个普通文件。接下来的三个字符rw-表示文件所有者(user,这里是root)有读写权限,没有执行权限;
  • 再接下来的三个字符r--表示所属组(group,这里也是root)有读权限,没有写和执行权限;
  • 最后的三个字符r--表示其他用户(others)有读权限,没有写和执行权限。

authorized_keys文件可以被所有用户读取,这通常不是推荐的做法。并且authorized_keys 文件目前属于 root 用户,应该改为目前的登录用户(也就是ssh时输入的用户名部分)。

首先,修改 authorized_keys 文件权限:,将 authorized_keys 文件的权限修改为只有所有者可以读写。

1
chmod 600 ~/.ssh/authorized_keys

然后修改 authorized_keys 文件所有者为目前登录的用户(将你的用户名替换掉[用户名]这一部分)

1
sudo chown [用户名]:[用户名] ~/.ssh/authorized_keys

chown(change owner): chown 命令用于改变文件或目录的所有者和/或所属组。

拷贝公钥

刚才的一系列操作都是为了能将生成的公钥拷贝到~/.ssh.authorized_keys下。然后在客户端(你的Mac)上,使用这个命令进行拷贝:

1
ssh-copy-id [用户名]@[主机地址]

测试SSH免密登录是否成功

上面的都设置完之后,用exit指令可以退出目前的ssh登录。

1
exit

然后再次使用ssh登录,就不需要密码了!

1
ssh [用户名]@[主机地址]