SSH 资料
Dec 30, 2015 SSH
1. 原理
1.1 SSH 原理
- 远程主机收到用户的登录请求,把自己的公钥发给用户
- 用户使用这个公钥,将登录密码加密后,发送回来
- 远程主机用自己的私钥,解密登录密码。如果密码正确,就同意用户登录
1.2 免密原理
- 将用户的公钥存在远程主机
- 登录时,远程主机通过用户的公钥加密一段随机的字符串发送回去
- 用户用自己的私钥解密字符串后返回。如果字符串正确,就同意用户登录
1.3 为什么有 known_hosts
- 恶意拦截登录请求,冒充远程主机,将伪造的公钥发送给用户
- 用户拿到公钥后,加密密码发送过来。恶意拦截者就可以拿到密码
为了避免上面的情况,加上 known_hosts,可以防止以后使用的时候被恶意拦截,但是无法防止第一次被恶意拦截(第一次一般会把公钥指纹打印出来问一下,个人觉得作用不大,没人会看的)
2. 操作
2.1 免询问
ssh: automatically accept keys
- ssh -oStrictHostKeyChecking=no user@host
注:这个在 mac 上不生效
或者在 ~/.ssh/config 中加
1 | Host * |
注:如果服务器变更了,这个 known_hosts 需要删掉重新生成。你也可以将 known_hosts 这个文件指向 /dev/null。使用
-oUserKnownHostsFile=/dev/null
2.2 免密
在需要免密登录其它机器的机器上执行:
- ssh-keygen -t rsa
- ssh user@host ‘mkdir -p .ssh && cat >> .ssh/authorized_keys’ < ~/.ssh/id_rsa.pub
'cat >> .ssh/authorized_keys' < ~/.ssh/id_rsa.pub
的作用是,将本地的公钥文件~/.ssh/id_rsa.pub
,重定向追加到远程文件 authorized_keys 的末尾