SSH是基于非对称加密实现的。
html
非对称加密的特色web
第一次登录时,remote server会将本身的公钥下发给client端。同时提示client以下信息算法
The authenticity of host 'ssh-server.example.com (12.18.429.21)' can't be established. RSA key fingerprint is 98:2e:d7:e0:de:9f:ac:67:28:c2:42:2d:37:16:58:4d. Are you sure you want to continue connecting (yes/no)?
客户端选yes后,会将远程主机的host, ip,公钥
放置到本身的.ssh/known_hosts文件中,这使得后续登陆,能够省去第一步。一个典型的know_hosts文件样例centos
ldn01.jamieweb.net,139.162.222.67 ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC4bVleGrAZFttdMBen/ExLWbUUr5UaaX3Wd8U4nwH6LEaOMxuYu2cyrBuwIVZ9gjSoI0fEWhe345HeQJbdNzE/rd5ojebtS9bQiAB9+GVNKHxemBP01M0OaZJVA/GJnSzjdoEfrCGG8SWIDPQjY02yTQwgQHW5zYlr12Hq3FjKzofJ1Q2PSWbCy3crsA/R4vPHRVLPd8RDj+EXWVwvFgTHriuQWnt9Q/djy1LOPrqNgHn1n17cIED1M0zgXpImoLNC+Z44DmopVdmtwRW57IkedktWQdpCNRYTyOj/as/xn5YStXIWwxila16NYeq6O7zqoedWPiad6qnFloobOcft nyc01.jamieweb.net,157.230.83.95 ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC8Gh3exdEvvWqZHdbBogN3kbfutx3af0oO9dof1L+4vFsA8xmMOURjdB/BF9uF44i+1yosOhxh+k0Kjgeo0JAjPWy8e94SpEn2oUFJ3/9y1QzpWR81aAi/B9gSX9KR6uDys1yIhjjBKE0omP6vvSSVndY7BkxXnxBsmvWqeCWP59tFFDVFADG4FLRQW6IPUlD3mJLXxzsbsBUP4x67TAFeHynL/ZyImSlHXWBow3hWopwPouqQpkcIcUZxdt8zR9xmAiEwk8wUDWQg5aMoYp2a8zy7fuUL6PXyomRpoVWKHyZposl1cmST88NXjK+J14oWPHzKAd7zcY29XOXSbKnR
客户端基于该公钥,加密本身的登陆密码,发送给remote server 。 remote server基于本身的私钥,解密消息,得到client发送的密码,完成认证。因为私钥只有server端有,因此即使中间人攻击,拿刀消息,也没法解密获取client发送的密码安全
在第一次登陆时,server下发本身的公钥,client须要信任并存储该公钥,这一步若是被中间人攻击,中间人下发了本身的公钥。从而可以获取到client的登陆密码, 中间人再做为client去跟remote server完成登陆
网络
前面SSH登陆中,每次都要输入本身的密码,很繁琐。能够继续利用非对称加密的原理。client本身也生成一组密钥对。将公钥上传至remote server。这样client和server双方,彼此都有一组公私密钥对,整个登陆过程,均可以加密进行,而不须要密码。具体步骤。ssh
client使用ssh-keygen
命令,生成一组公私密钥对。生成后通常在.ssh文件夹下,其中id_rsa为私钥,id_rsa.pub为公钥,将公钥上传至remote server 。这一步仅需作一次。加密
client的公钥上传后,通常存在server 端的/.ssh/authorized_keys文件中。.net
将公钥上传至server 的authorized_keys文件的方法有几种rest
ssh user@host 'mkdir -p .ssh && cat >> .ssh/authorized_keys' < ~/.ssh/id_rsa.pub
,也能够直接登陆到server,而后手动编辑authorized_keys文件。ssh-copy-id user@host
.ssh 文件像user的.profile同样,是跟用户相关的。也即root和ops这两个用户,其.ssh的路径和其下的内容是不同的。.ssh文件的目录结构
查询守护进程的状态service sshd status
重启service sshd restarts
启动service sshd start
中止service sshd stop
通常更改了/etc/ssh/sshd_config
文件,则须要重启sshd服务
Authentication refused: bad ownership or modes for file /somepath/.ssh/authorized_keys
这个错误的缘由是,SSH server会在有登陆访问请求时,检查authorized_keys文件的权限是否配置正确,具体来讲,就是不能开放给除当前用户意外的其它用户写权限。因此解决办法很简单。确认下authorized_keys文件的group和Others是否写权限,有的话,直接去掉
chmod g-w authorized_keys
之因此有这个限制缘由是,一个.ssh文件应该只跟对应的用户相关,至关于用户的profile,该文件的编辑权限,应该只有当前用户,和root能够去编辑。而不能容许其它用户去编辑,不然其它用户能够很容易的添加一些不恶意的client的公钥到该文件,使得恶意的client能够登陆到该server。
固然,你能够不改authorized_keys的权限,而是把/etc/ssh/sshd_config
配置文件中的StrictModes 设为no ,从而使得sshd不对文件的权限作校验,但很是不建议这么作。
https://www.jianshu.com/p/33461b619d53
https://www.ruanyifeng.com/blog/2011/12/ssh_remote_login.html
https://www.daveperrett.com/articles/2010/09/14/ssh-authentication-refused/
https://tldp.meulie.net/en/solrhe/chap15sec122.html