1.在客户端生成公钥和私钥
ssh-keygen -f ~/.ssh/filename
filename替换为实际的文件名。该命令会提示输入口令用来加密私钥,如果不需要直接回车。
命令执行完毕后会在~/.ssh/下生成两个文件,一个filename,这个是私钥;一个是filename.pub,这个是公钥。
2.将生成的公钥添加到远程SSH服务器
将生成的公钥filename.pub文件,复制到ssh服务器对应用户下的~/.ssh/authorized_keys文件,可以有多种方式。
服务器下的.ssh文件夹通常是隐藏的,可以采用 ll -al的方式显示隐藏文件。
使用ssh-copy-id-for-OSX工具
# 使用brew安装工具
brew install ssh-copy-id
#将username和hostname替换为你的ssh服务器用户名和IP
ssh-copy-id username@hostname
通用方法
# 将公钥文件复制至ssh服务器
scp ~/.ssh/filename.pub username@hostname:~/
# 使用用户名和密码方式登录至ssh服务器
ssh username@hostname
#若.ssh目录已存在,可省略此步
mkdir .ssh
#将公钥文件id_rsa.pub文件内容追加到authorized_keys文件
cat id_rsa.pub >> .ssh/authorized_keys
3.配置别名,使登录更简单
完成以上步骤后,理论上就可以输入ssh username@hostname直接登录了,但是这样还是需要输入还是有些繁琐,我们可以通过配置别名,使登录更快捷。
在客户端~/.ssh目录下创建config配置文件,如有该文件就不需要新建,直接往里添加内容就好了。
添加文件内容格式如下:
Host alias #自定义别名
HostName hostname #替换为你的ssh服务器ip或domain
Port port #ssh服务器端口,默认为22
User user #ssh服务器用户名
IdentityFile ~/.ssh/filename #第一个步骤生成的公钥文件对应的私钥文件
保存文件退出后,就可以使用别名登录服务器了
ssh alias #alias表示配置的别名
3.配置不生效的解决方案
通常情况下配置完后就应该没有问题,但是我真的又踩到了坑——配置不生效。在网上查找,并多次尝试终于找到了原因。
在我这里访问权限就是罪魁祸首。
在网上搜索到的访问权限,一直认为是.ssh目录或authorized_keys的访问权限,因为我是使用ssh-copy-id工具创建的,理论上权限应该是没有问题的,但我还是跟正常访问的服务器(另一个服务器配置生效)做了对比,果然权限没有问题。
使用ssh -v alias查看ssh上的log,对比两台服务器的差异,发现有一处不一致。
正常的服务器:
debug1: Next authentication method: publickey
出问题的服务器:
debug1: Next authentication method: password
两个的验证方式不同,那么是什么原因导致的呢?就是权限的问题,是home目录的权限问题。
正常的服务器中的home目录的权限是:
drwxr-xr-x
出问题的服务器中home目录的权限是:
drwxrwxr-x
权限不同,虽然觉得好像没有什么相关性,但测试修改试试。
chmod 755 /home
顺利通过,原来是目录的授权出了问题!!
扫码关注w3ctech微信公众号