通过密钥登陆 ssh

2,219 阅读1分钟

生成密钥对

通过密钥登陆 ssh 首先你得有一对密钥,以 Mac OS 为例创建密钥

$ ssh-keygen -t rsa -b 4096 -C "your_email@example.com"
> Generating public/private rsa key pair.

当提示您“输入要在其中保存密钥的文件”时,请按Enter。这接受默认文件位置。

> Enter a file in which to save the key (/Users/you/.ssh/id_rsa): [Press enter]

设置私钥的保护密码,这样即使私钥被盗,不知道密码也无法使用,然而代价就是每次你在使用私钥时都必须输入密码。你也可以回车选择不输入

> Enter passphrase (empty for no passphrase): [Type a passphrase]
> Enter same passphrase again: [Type passphrase again]
Your identification has been saved in ~/.ssh/id_rsa <== 私钥
Your public key has been saved in ~/.ssh/id_rsa.pub <== 公钥

现在,用户的家目录中生成了一个 .ssh 的隐藏目录,内含两个密钥文件。 私钥id_rsa ,公钥id_rsa.pub。

配置 SSH 服务端

拷贝公钥

登陆你的服务器,将公钥中的内容拷到 ~/.ssh/authorized_keys 文件中

如果没有 ~/.ssh 目录需要新建

$ vi ~/.ssh/authorized_keys

完成之后,为了确保连接成功,请保证以下文件权限正确:

$ chmod 600 ~/.ssh/authorized_keys
$ chmod 700 ~/.ssh

设置 SSH,打开密钥登录功能

编辑 /etc/ssh/sshd_config 文件,进行如下设置:

RSAAuthentication yes
PubkeyAuthentication yes

另外,请留意 root 用户能否通过 SSH 登录:

PermitRootLogin yes

最后,重启 SSH 服务

service sshd restart

SSH 客户端配置

已 Mac OS 为例,在之前创建好的 ~/.ssh 目录下新建一个 config 文件,内容如下

Host 别名
	HostName ip
	Port 端口
	User ssh用户名
	IdentityFile 私钥地址
	PreferredAuthentications publickey
	UseKeychain yes
	AddKeysToAgent yes

UseKeychain 是使用 Mac OS 的 钥匙串来管理密钥 AddKeysToAgent 是将密钥加入到 Agent ,ssh-agent 是一个跑在后台的帮你缓存key passphrase的进程

以下是一个例子

Host vps
	HostName 1.2.3.4
	Port 22
	User root
	IdentityFile ~/.ssh/id_rsa
	PreferredAuthentications publickey
	UseKeychain yes
	AddKeysToAgent yes

参考

SSH代理在启动过程中不会自动在OSX Sierra钥匙串上加载密码

生成新的SSH密钥并将其添加到ssh-agent