使用 SSH-Key 登录远程服务器
ssh 提供两种级别的安全认证:
- 基于口令的安全认证
- 基于密钥的安全认证
基于口令的安全认证
需要知道用户名和密码即可登录,该连接是加密的,但客户端不能确认目标主机是否为“伪造的”,也不能保证口令安全。
远程主机的 /etc/ssh/sshd_config 需配置:
1 | PasswordAuthentication yes |
重启 sshd 使改动生效:
1 | $ /etc/init.d/sshd reload |
基于密钥的安全认证
需要用户持有“公钥/私钥对”,远程服务器持有公钥,本地持有私钥。
客户端向服务器发出请求。服务器收到请求之后,先在用户的主目录下找到该用户的公钥,然后对比用户发送过来的公钥。如果一致,服务器用公钥加密“质询”并发送给客户端。客户端收到“质询”后用私钥解密,再发还给服务器。认证结束。
生成 ssh-key,选加密算法(rsa、dsa),给秘钥命名(可选):
1 | $ ssh-keygen -t rsa -C "name" |
passphrase 是证书口令,以加强安全性,避免证书被恶意复制。
会在 ~.ssh
下生成 id_rsa
,
id_rsa.pub
两个文件,分别是 私钥/公钥。
公钥需保存到远程服务器 ~/.ssh/authorized_keys
里,私钥由客户端本地留存。
要保证 .ssh
和 authorized_keys
都只有用户自己有写权限。否则验证无效。
1 | $ chmod -R 700 ~/.ssh/ |
ssh 配置的一些实践
1 | $ vim /etc/ssh/sshd_config |
持有多个 ssh-key 时的使用方法
简单情况下,通过手动指定私钥文件登录
1 | $ ssh username@hostname -i ~/.ssh/my_id_rsa |
觉得麻烦可以配置客户端的 /etc/ssh/ssh_config
1 | IdentityFile ~/.ssh/id_rsa |
你也可以使用 SSH Agent,下面以使用 GitHub 为场景简单介绍。
1 | $ ssh-keygen -t rsa -C 'second@mail.com' |
创建 ~/.ssh/config
1 | Host github.com |
配置完成后,在连接非默认账号的仓库时,远端地址要修改为
1 | git remote add test git@github-second:second/test.git |