Ubuntu配置ssh密钥登录

Author Avatar
ciaoly 2017年12月18日
  • 在其它设备中阅读本文章

Linux的ssh常用的登录格式是这样的

ssh [-p port] user@remotehost

这样子每次都得输入密码, 当然这样子密码就不容易忘记了(呵呵).


本文参考

1. 创建密钥

使用密钥登录需要先创建一对非对称加密的密钥, 使用ubuntu自带的 ssh-keygen 密钥生成工具即可生成

ssh-keygen -t rsa

控制台会按照以下顺序来与用户交互以完成密钥的生成工作:

  1. 密钥对存储目录(默认在~/.ssh/目录下的id_rsa文件)
  2. 私钥的加密口令(此口令用来保护私钥以防止它被别人窃取后滥用)

2. 将公钥上传到服务器

可以使用 scp 命令上传公钥, 当然Ubuntu提供了一个工具用来上传公钥并自动完成相应配置 使用 ssh-copy-id :

ssh-copy-id [-i identity_file] [-p port] user@remotehost

上传完成后登录到服务器并检查其 ~/.ssh/authorized_keys 文件是否有重复密钥添加在其中 另者, authorized_key文件的权限必须只限其拥有者读写(权限 600)

3. 在本地将私钥文件添加到ssh-agent

如果没有将私钥添加到ssh-agent, 那么会报以下错误:

sign_and_send_pubkey: signing failed: agent refused operation

操作方法如下, 首先在当前bash进入 ssh-agent 环境

ssh-agent bash

然后使用 ssh-add 添加私钥到ssh-agent

ssh-add [private_key_file]

4. 配置(绑定)IP、用户名和端口

即使是配置了密钥对, 在使用ssh登录时依然需要附加端口号和用户名(当然, 默认端口22和用户名重名的情况下就不需要了). 使用以下方法将ip/用户名/端口预先配置(绑定)好

vim ~/.ssh/config

将以下信息写入配置文件

Host "remote ip"
User "username"
Port "port" 

完成了以上操作, 就可以简单地使用以下命令登录服务器啦.

ssh remote_host