如何实现免密码登陆
1.生成密钥对
# ssh-keygen
提示问题可以直接回车选择默认即可。
Enter passphrase (empty for no passphrase)
,这个密码的作用是保护本地私有密钥的密码。也就是说,即使有人到用了你的计算机或私钥文件,在使用密钥登录时也会要求输入密码解锁私钥文件。
默认在~/.ssh
目录生成两个文件:id_rsa
(私钥)和id_rsa.pub
(公钥)。
2.上传公钥到服务器端
# ssh-copy-id -i ~/.ssh/id_rsa.pub xxxx.com
现在我们就可以在客户端直接用ssh xxxx.com
来登陆了,本地的公钥文件也可以删除了。
3.进一步配置
修改服务端
配置文件,拒绝拒绝密码验证。修改/etc/ssh/sshd_config
文件。
PasswordAuthentication yes # 改为no
然后重新启动sshd
。
# systemctl restart sshd
修改SSH的端口
一、修改ssh配置文件
在/etc/ssh/sshd_config中添加:
Port 22 # 先保留22端口,成功后再删除
Port 12345
安装SELinux的管理工具semanage
# yum provides semanage
再安装运行semanage所需依赖工具包policycoreutils-python
。
# yum -y install policycoreutils-python
查询当前 ssh 服务端口:
# semanage port -l | grep ssh
向 SELinux 中添加 ssh 端口:
# semanage port -a -t ssh_port_t -p tcp 12345
防火墙放行
# firewall-cmd --zone=public --add-port=12345/tcp --permanent
# firewall-cmd --reload
然后重启 ssh 服务:
# systemctl restart sshd.service
尝试通过10086端口登录SSH,或者进入该服务器直接本地访问SSH如下:
# ssh root@localhost -p 12345
如果成功,说明12345
已经完全可以使用了,接下来你就可以根据上述步骤把sshd_config
的Port22
注释掉,SELinux
和防火墙关闭22
端口就OK!