mac用ssh连linux服务器
前言
网上的一些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 | ssh [用户名]@[主机地址] |
在终端中,用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 [用户名]@[主机地址] |