SSH是基于非对称加密实现的。
非对称加密的特点
第一次登陆时,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文件样例
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双方,彼此都有一组公私密钥对,整个登录过程,都可以加密进行,而不需要密码。具体步骤。
client使用ssh-keygen
命令,生成一组公私密钥对。生成后一般在.ssh文件夹下,其中id_rsa为私钥,id_rsa.pub为公钥,将公钥上传至remote server 。这一步仅需做一次。
client的公钥上传后,一般存在server 端的/.ssh/authorized_keys文件中。
将公钥上传至server 的authorized_keys文件的方法有几种
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
原文:https://www.cnblogs.com/niceshot/p/13019823.html