SSH 免密登录
今天重装 CentOS 后发现按照之前的步骤来配置 SSH 后一直提示 Permission denied
,第一反应反应就是 /etc/ssh/sshd_config
配置出错,但是仔细检查一遍之后并没有发现什么错误。后来网上找到原因是权限问题,赶快记笔记,防止以后再遇上这个坑而不知道。
索性把配置 SSH 服务端的流程都过一遍,这里以 CentOS 为例,其它发行版只是包管理器的差别。
安装 openssh
这一步一般情况下不需要,以为几乎全部的 Linux 发行版都自带的 SSH。当然,如果机器上没有安装,可以手动安装。
在服务器上执行以下命令:
1 | sudo yum install -y vim openssh net-tools |
这里除了安装 openssh 之外还安装 vim 用来修改配置文件以及 net-tools 获取服务器的公网/内网 IP。
创建 SSH 密钥
要实现免密登录,我们需要把自己机器(这里使用的是MacOS,其它平台一样)产生的 SSH 公钥部署到服务器上。回到客户端,执行命令:
1 | ssh-keygen -t rsa -C "your identification" |
选择默认的路径和文件保存密钥对,提示输入 passphrase 时,可以直接回车不设置,但 更好的实践方式 还是设置一个密码来提高安全性。执行完后会在 ~/.ssh
目录下生成两个文件:id_rsa
、 id_rsa.pub
,第二个文件就是我们需要部署到服务器上的公钥。
使用 GitHub 应该都会经过这一步骤
部署本机 SSH 公钥
SSH 服务端有了,客户端密钥也有了,还需要把公钥部署到服务器上才可以实现 SSH 秘钥登录。先登录服务器,执行 ifconfig
获取到 IP 地址,然后在 客户端 执行 ssh <servername>@<ip>
进行登录,这时候是可以通过 <servername> 的密码进行登录的。
登录后,执行 sudo vim /etc/ssh/sshd_config
打开 SSH 服务端配置文件,搜索 PubkeyAuthentication
,修改值为 yes
,搜索 PasswordAuthentication
,修改值为 no
,最后搜索 PermitRootLogin
并修改为 no
,然后保存。实现的效果是不允许使用密码登录,不予许使用 root 用户进行登录,只可以使用 公钥 的方式进行登录。
在配置文件中还可以看到 AuthorizedKeysFile .ssh/authorized_keys
这样的键值对,这里指明了保存公钥的文件路劲。那么接着执行 mkdir ~/.ssh && touch ~/.ssh/authorized_keys
来创建保存公钥的文件,然后打开它 vim ~/.ssh/authorized_keys
,把客户端生成公钥粘贴进去,保存即可。
然后执行 sudo service sshd restart
重启 SSH 服务。
核心的步骤到这里就都完成了。
权限问题
完成到上一步理论上免密登录的基础就打好了,但是这时登录会提示 Permission denied XXX
,这其实是 .ssh
目录的权限问题, 所以造成了 SSH 不认可这个目录及里面的文件。所以还需要修改权限:
1 | chmod 700 ~/.ssh && chmod 0600 ~/.ssh/authorized_keys |
完成后就可以开心的使用 SSH 公钥进行服务器登录了。
踩了一个坑,对 SSH 的了解更多,然后也发现自己在 Linux 权限方面的不足