1.写在前面的话
- 用linux系统,肯定少不了使用
ssh
,为什么?你难道想带着你的u盘从上海跑到北京吗? - 如果你只会
ssh xxxx@xxxxx
或者scp xxxxxx xxxxxx
这两条命令的话,我相信你一定不了解ssh里面深层次的东西 - 那为什么要了解深层次的东西呢?不是会用就可以了吗?因为当你想
不用密码就登录服务器
或者不输入一长串ip地址
的时候,就需要了解这些东西了 - 本文主要就以上两个情况进行技术分析
2.不用密码登录
- 每次都要输入密码,太过于繁琐了
- 要想不用密码登录,就要考虑使用公钥。公钥是什么呢?就是由本地机子生成的,用于本地和服务器之间进行连接的钥匙,而私钥是用于解密从服务器端发送的由公钥加密的信息,反过来,公钥是用于解密本地的由私钥加密的信息。
- 简单来讲,本地和服务器要想连接起来,就必须互相发一条消息,通过加密解密来相互认证,看是否一致,若一致就同意连接
- 综上,通过公钥就能实现免密码的过程,因为身份验证的过程已被加密解密过程所替代了
- 那么,具体怎么操作呢?
-
首先,在你的本地运行以下命令,在
~/.ssh/
下创建一个名叫id_rsa-remote-ssh
的密钥,这个密钥包含了两个密钥对,即:① 公钥:id_rsa-remote-ssh.pub
② 私钥:id_rsa-remote-ssh
ssh-keygen -t rsa -b 4096 -f ~/.ssh/id_rsa-remote-ssh
其中,
-f
是自己指定创建的密钥名称,如果不指定,会创建一个名为id_rsa
的密钥,如果你想为不同的服务器创建不同的密钥,(想要方便管理的话)就要用-f
-
然后,将公钥
id_rsa-remote-ssh.pub
复制到服务器的~/.ssh/
下,这样就完成了认证文件的传递了 -
最后,在服务器上运行:
cat id_rsa-remote-ssh.pub >> authorized_keys
这样就完成了认证连接啦,下一步就是运行
ssh xxxxx@xxxx
试试水了 -
[补]:开始的时候没有注意,忘了修改本地端的
id_rsa-remote-ssh.pub
文件权限了,怪不得会报出以下警告:@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @ WARNING: UNPROTECTED PRIVATE KEY FILE! @ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ It is required that your private key files are NOT accessible by others. This private key will be ignored.
警告内容无非是说:
id_rsa-remote-ssh.pub
文件可以被服务器操作,造成安全隐患,所以运行以下代码就可以了:sudo chmod 600 id_rsa-remote-ssh.pub
[补]:在服务器端的
authorized_keys
的权限也要设置为600
,不然,仍需要输入密码登录
3.不输入ssh xxx@xxxx
- 解决了输密码的问题后,还想一步登天------不输入
ssh xxx@xxxx
中的xxx@xxxx
,而是改为自定义的名称,比如iloveai
- 具体怎么做呢?
-
首先,打开
~/.ssh/config
文件 -
然后,在里面添加以下代码:
Host iloveai HostName ------remote ip------ User i_-------remote username-------- IdentityFile ~/.ssh/id_rsa-remote-ssh.pub
-
最后,运行
ssh iloveai
,看看能不能直接连上吧 -
[补]: 还没完,做了第4步后,还会提示以下的错误:
Load key "xxxxxxxx/.ssh/id_rsa-remote-ssh.pub": invalid format
报上面的错误的原因是,
ssh
的版本问题,我现在用的是高版本的ssh
,所以不能在~/.ssh/config
下的IdentityFile
中写id_rsa-remote-ssh.pub
,而应该改为id_rsa-remote-ssh
-
[补2]: 原来在
IdentityFile
中写id_rsa-remote-ssh.pub
本来就是错误的做法,正确的做法肯定是写id_rsa-remote-ssh
,因为在认证的时候,本地给服务器发的就是经过私钥id_rsa-remote-ssh
加密的信息,然后在服务器用公钥id_rsa-remote-ssh.pub
进行解密
4. 顺便提提http和https吧
- https就是加密的http,道理和密钥一样
- http就是一种浏览器和服务器进行通信的一种协议,但是没有密码哦,所以如果你登录采用http协议的网站进行网购的时候,你的个人信息很有可能被第三方截取
- 那么,https就是在http上增加了密码,这样信息泄露的概率就大大降低了