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 这一文件中
并调整相应的权限设置。
另一种则是采用一键配置的指令。自动完成这一些操作。先介绍这一种简便的方式
简便方式:
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 | cd .ssh |
更改配置文件
1 | vim /etc/ssh/sshd_config |
修改这一文件中的如下几个配置(没有的手动添加)
1 | PubkeyAuthentication yes # 公钥登录 |
重启ssh服务
1 | systemctl restart sshd |
重启后即可尝试用ssh连接。若无需输入密码,则配置成功。