运行环境:客户端macOS ,服务器centOS(192.168.123.229)
原理:client保留私钥,在使用ssh
登录server时,ssh
会发送私钥去和server上的公钥做匹配,若匹配成功则可以登录。
操作:把client生成的公钥文件内容追加到server的~/.ssh/authorized_keys
文件中
由于执行ssh-keygen
命令后默认会在~/.ssh
目录中生成公钥和私钥文件,这里先切换到~/.ssh
目录并查看现有的密钥文件
cd ~/.ssh
ls
客户端macOS生成公钥
ssh-keygen -t rsa -f demo1
-t
指定密钥格式为rsa
,-f
指定文件名为demo1
如果不指定文件名,则文件名默认为id_rsa
(私钥文件:id_rsa,公钥文件id_rsa.pub)
执行指令后提示你输入密码passphrase,此处不输入任何字符直接回车
其中demo1.pub
为公钥文件,demo1
为私钥文件
把公钥文件demo1.pub
传到服务器
需要注意的是我这里服务器账号直接用的是root,所以路径是~/.ssh
,其他自建账号路径为/home/你的自建账号/.ssh
scp ~/.ssh/demo1.pub root@192.168.123.229:~/.ssh
输入服务器的root对应的密码
服务器centOS
cd ~/.ssh
ls
可以看到由客户端macOS传输过来的demo1.pub
文件
demo1.pub
文件内容复制到~/.ssh/authorized_keys
文件里面,并授予权限644
cat demo1.pub >> authorized_keys
chmod 700 ~/.ssh
chmod 644 ~/.ssh/authorized_keys
修改服务器centOS的ssh配置文件
vi /etc/ssh/sshd_config
主要修改项如下
#公钥存储位置
AuthorizedKeysFile .ssh/authorized_keys
#允许root账户登陆(慎用)
PermitRootLogin yes
#开启公匙认证
PubkeyAuthentication yes
PasswordAuthentication yes
StrictModes no
重启sshd服务
service sshd restart
客户端macOS测试连接是否成功
ssh root@192.168.123.229
没有要求你输入密码则说明免密码连接生效了
如果失败则可以带上-v
开启调试模式来排查问题
ssh -v root@192.168.123.229
也可以使用-vvv
获得更加详尽的信息
ssh -vvv root@192.168.123.229
原因在于这里只去匹配id_rsa
等私钥,没有去匹配demo1
这个私钥
需要配置一下SSH
SSH 的配置文件有两个:
cat /etc/ssh/ssh_config # 系统配置文件
cat ~/.ssh/config # 用户配置文件
编辑
vi ~/.ssh/config
追加如下内容
Host 192.168.123.229
IdentityFile ~/.ssh/demo1
设置权限
sudo chmod 600 ~/.ssh/config
再次执行
ssh -vvv root@192.168.123.229
可以看到把私钥demo1
带上并成功通过验证了
额外
macOS重启ssh
#停止
sudo launchctl unload /System/Library/LaunchDaemons/ssh.plist
#启动
sudo launchctl load -w /System/Library/LaunchDaemons/ssh.plist
#查看
sudo launchctl list | grep sshd