生成密钥对
通过密钥登陆 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