SSH配置免密登录
2022-07-15 # Linux # SSH

SSH配置免密登录

在使用SSH登录服务器时,除了使用账号密码的方式验证身份之外。还能采用在服务器中配置公钥的方式来实现免密登录。关于免密登录的原理,这里就不在赘述。可以参考这篇文章:https://www.jianshu.com/p/33461b619d53

大致步骤

1.客户端生成一对公钥和私钥

2.上传公钥到服务器的对应目录下

3.调整相关权限和配置文件

在客户端生成一对公钥和私钥

对于windows操作系统,可以在cmd或git bash中执行下面的命令

1
ssh-keygen

上述命令默认使用rsa算法。也可通过-t等参数指定其他算法。这里采用默认方式。

三个选项均可以选择默认。按回车即可。红色框内的即为公钥私钥保存路径。如果想修改。可以在第一次选项的时候输入想要保存的路径。

在对应路径下,可以找到上面两个文件。id_rsa即为私钥,id_rsa.pub即为公钥

将公钥上传到服务器并配置

这一步骤有两种方式:

一是用scp等指令,将公钥先上传到服务器,再导入到~/.ssh/authorized_keys 这一文件中

并调整相应的权限设置。

另一种则是采用一键配置的指令。自动完成这一些操作。先介绍这一种简便的方式

简便方式:

Bash
1
ssh-copy-id -i 公钥路径 用户名称@服务器地址

在Git Bash中执行上面的命令,注意上面的命令是公钥的路径。不要写成私钥了。

输入完形如上图的指令后,再输入对应用户的密码。出现上图的提示信息后,即为成功。

执行命令

1
ssh 用户名称@服务器地址

若无需输入密码直接连接上shell,就说明配置成功。

手动配置:

上传公钥到服务器

可以采用scp指令在服务器和客户端之间传输文件。使用方式如下

从本地传输文件到服务器:

1
scp -r 本地文件路径 用户名@服务器ip:服务器路径

例如要将E盘根目录下的一张图片传到ip为172.122.1.1服务器的home目录下。使用root账号登录

1
scp -r /d/1.png root@172.122.1.1:/home

本地文件的路径可以直接将文件拖入到shell窗口中,会自动显示。cmd和Git Bash中对于路径的解释方式不同。建议采用将文件拖入的方式来书写本地路径

-r参数为递归复制整个目录。可以直接用于传输文件夹。

从服务器下载文件到本地

1
scp -r 用户名@服务器ip:文件路径 要拷贝到的本地路径

例如,将服务器中的t.log拷贝至当前文件夹(用户当前的工作文件夹,即在cmd中,用户名后面的一串路径)

1
scp -r root@192.168.6.1:/home/shiji/test/t.log ./

将公钥中的内容写入指定文件

每个用户的ssh公钥存放的位置位于该用户家目录下的.ssh中的authorized_keys中

例如对于名为git的用户,其公钥的内容应写入/home/git/.ssh/authorized_keys这一文件中

快速写入的方式

1
cat id_rsa.pub >> home/git/.ssh/authorized_keys

采用流的方式。将公钥文件内的内容附加到authorized_keys这一文件的结尾。可用vim查看附加的结果。

若没有这一文件可以也可先创建。

id_rsa.pub为公钥的路径。应填写相应的文件名和路径

更改权限

例如对于名为git的用户而言

/home/git的权限应为700

/home/git/.ssh的权限为700

/home/git/.ssh/authorized_keys的权限应为600

因此参考以下操作

1
2
3
4
cd .ssh
chmod 700 ../
chmod 700 .
chmod 600 authorized_keys

更改配置文件

1
vim /etc/ssh/sshd_config

修改这一文件中的如下几个配置(没有的手动添加)

1
2
PubkeyAuthentication yes       # 公钥登录 
AuthorizedKeysFile .ssh/authorized_keys #公钥路径

重启ssh服务

1
systemctl restart sshd

重启后即可尝试用ssh连接。若无需输入密码,则配置成功。