1、本地生成公钥和私钥
这边是使用git 中 shell产生的,其他类Unix系统可以直接在终端生成。
ssh-keygen -t rsa -C "kg-git"
#该命令产生的密钥是通过rsa算法加密生成的
生成密钥过程中可以一路回车,不给定密钥文件名字和密码,使用默认的密钥文件名称和空密码
默认生成的这个是公钥id_rsa.pub 和 私钥 id_rsa
也可以使用 ssh-keygen -f othername 来生成指定的文件名,或者生成之后改名
但是ssh命令默认只会读取 id_rsa这个私钥,所以如果 是其它 的名字需要添加配置文件 ~/.ssh/config
注意:若未使用默认的id_rsa,则需要额外配置~/.ssh/config,加入(注意host后面可以用ip或者其他域名):
Host crm.abc.com
IdentityFile ~/.ssh/id_rsa.abc
生成过程截图
2、然后分发公钥到目标机器
ssh-copy-id -i ~/.ssh/id_rsa.pub 用户名@对方机器IP (注意不要忘记了参数-i)
注:ssh-copy-id -i 是最简单的办法,如果无法使用。可以分以下二个步骤:
a) 先scp或者其他工具 将本机的id_rsa.pub复制到对方机器的.ssh目录下
b) 在对方机器上执行如下命令,导入公钥。
将上传的公钥文件的内容追加到authorized_keys文件,使用如下命令:
mkdir -p ~/.ssh
cat id_rsa.pub >> ~/.ssh/authorized_keys
3、服务器修改ssh配置
修改ssh配置文件"/etc/ssh/sshd_config"的下列内容,将以下内容的注释去掉:(使用/RAS查找)
RSAAuthentication yes # 启用 RSA 认证,如果没有也可以不用修改该项
PubkeyAuthentication yes # 启用公钥私钥配对认证方式
AuthorizedKeysFile .ssh/authorized_keys # 公钥文件路径(和上面生成的文件同)
4、修改authorized_keys和.ssh的文件权限
chmod 700 ~/.ssh/
chmod 600 ~/.ssh/authorized_keys
5、重启SSH服务
service sshd restart
6、使用本机的私钥既可以免密码登陆
后续可以进行进一步的设置
1.如果使用git,注意将登录shell改为git-shell,禁止 git 用户 ssh 登录服务器
编辑 /etc/passwd
找到:
git:x:1001:1001::/home/git:/bin/bash
修改为:
git:x:1001:1001::/home/git:/bin/git-shell
此时 git 用户可以正常通过 ssh 使用 git,但无法通过 ssh 登录系统。
ssh 免密码登录失败 · Issue #93 · codcodog/Blog · GitHub
2. 问题解决:
上面的操作完成后,就可以用 ssh 对方机器IP 来测试了,顺利的话,应该不会提示输入密码。
如果失败,有可能是以下原因:
1、权限问题
.ssh目录,以及/home/当前用户 需要700权限,参考以下操作调整
sudo chmod 700 ~/.ssh
sudo chmod 700 /home/当前用户
.ssh目录下的authorized_keys文件需要600或644权限,参考以下操作调整
sudo chmod 600 ~/.ssh/authorized_keys
2、StrictModes问题
编辑
sudo vi /etc/ssh/sshd_config
找到
#StrictModes yes
改成
StrictModes no
如果还不行,可以用ssh -v 目标机器ip 查看详情,根据输出内容具体问题具体分析了