类似于Github,默认情况下我们是没有公钥和私钥的:
ssh-keygen -t rsa
ssh-keygen -t rsa
这将在您的本地电脑
~/.ssh
~/.ssh
目录中生成一个id_rsa(私钥-本地电脑位置)和 id_rsa.pub(公钥-远程服务器位置)文件。
远程CentOS目录
我们需要把id_rsa.pub中的内容:
ssh-rsa xxxx= code.deeper@gmail.com
ssh-rsa xxxx= code.deeper@gmail.com
方式一:复制id_rsa.pub全部内容并填到authorized_keys文件中(Github则是SSH keys中在个人设置中填写) 方式二:同上,ssh-copy-id -i ~/.ssh/id_rsa.pub user@remote_host
方式三:CentOS的后台-SSH密钥-创建密钥,会生成一个公钥自动放入到如下目录(不需要我们手动操作),并且会生成一个pem文件(存放了私钥,ssh_login.pem文件通常是私钥文件)
~/.ssh/authorized_keys
~/.ssh/authorized_keys
您将需要使用 -i 标志与 ssh 指定您要使用此新密钥而不是 id_rsa:
ssh -i ssh_login.pem root@remote_host
ssh -i ssh_login.pem root@remote_host
关闭密码登录(腾讯云打开SSH密钥登录的时候就已经关闭了密码登录)
当出现:Permission denied (publickey,gssapi-keyex,gssapi-with-mic) 说明SSH服务器已经没有启用密码登录选项了。
如何关闭密码登录
- 使用 root 权限登录服务器
- 打开配置文件:sudo nano /etc/ssh/sshd_config
- 找到以下行:PasswordAuthentication yes
- 将 yes 改为 no
- 保存并关闭文件
- 重启 SSH 服务:sudo service ssh restart
更改完配置文件后,密码登录就已经关闭了。这样就只能使用私钥登录了。
不想每次都填写ssh -i ssh_login.pem,怎么样更简单?
- 首先启动 ssh-agent:
eval "$(ssh-agent -s)"
- 添加私钥文件到 ssh-agent:
ssh-add ssh_login.pem
- 现在可以使用 ssh 命令而不需要使用 -i 选项:ssh user@remote_host
这样就可以避免每次都输入私钥文件路径了。ssh-agent 会管理您的私钥,并且在每次登录时使用它。
另外,如果你想让 ssh-agent 开机自启动,可以将上面的 eval "$(ssh-agent -s)" 加入到 ~./bashrc 或 ~./bash_profile 中。
这样,每次登录系统时就会自动启动 ssh-agent并且加载添加的私钥,可以避免每次都输入私钥文件路径了,更加方便。