转载

Linux SSH使用密钥实现免密码登录

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 

顺利通过,原来是目录的授权出了问题!!

Linux SSH使用密钥实现免密码登录

扫码关注w3ctech微信公众号

正文到此结束
Loading...