共计 2436 个字符,预计需要花费 7 分钟才能阅读完成。
- SSH
SSH 为 Secure Shell 的缩写,由 IETF 的网络小组(Network Working Group)所制订。利用 SSH 协定能够无效避免远程管理过程中的信息泄露问题。简略说,SSH 是一种网络协议,用于计算机之间的加密登录。
最早的时候,互联网通信都是明文通信,一旦被截获,内容就裸露无疑。1995 年,芬兰学者 Tatu Ylonen 设计了 SSH 协定,将登录信息全副加密,成为互联网安全的一个根本解决方案,迅速在全世界取得推广,目前曾经成为 Linux 零碎的标准配置。如果要在 Windows 零碎中应用 SSH,会用到另一种软件 PuTTY。
SSH 之所以可能保障平安,起因在于它采纳了公钥加密。
过程:
(1)近程主机收到用户的登录申请,把本人的公钥发给用户。
(2)用户应用这个公钥,将登录明码加密后,发送回来。
(3)近程主机用本人的私钥,解密登录明码,如果明码正确,就批准用户登录。
中间人攻打与解决办法:
中间人收到近程主机公钥之后,假冒近程主机将伪造的公钥发给用户,用户将很难分别真伪,用户用伪造的公钥加密时会被中间人截获,会呈现安全漏洞。因为不像 https 协定,SSH 协定的公钥是没有证书核心(CA)公证的,也就是说,是本人签发的。解决办法:如果是第一次登录对方主机,零碎会呈现上面的提醒:
$ ssh user@host
The authenticity of host ‘host (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)?
示意无奈确认 host 主机的真实性,只晓得它的 公钥指纹是 ***,承受输出 yes?所谓 "公钥指纹",是指公钥长度较长(这里采纳 RSA(Rivest-Shamir-Adleman 始终非对称加密算法),长达 1024 位),很难比对,所以对其进行 MD5 计算,将它变成一个 128 位的指纹。上例中是 98:2e:d7:e0:de:9f:ac:67:28:c2:42:2d:37:16:58:4d 以简化比照。近程主机必须在本人的网站上贴出公钥指纹,以便用户自行核查。输出 yes 后,呈现:
Warning: Permanently added ‘host,12.18.429.21’ (RSA) to the list of known hosts.
而后,会要求输出明码。如果明码正确,就能够登录了。当近程主机的公钥被承受当前,它就会被保留在文件 $HOME/.ssh/known_hosts 之中。下次再连贯这台主机,零碎就会认出它的公钥曾经保留在本地了,从而跳过正告局部,间接提醒输出明码。每个 SSH 用户都有本人的 known_hosts 文件,此外零碎也有一个这样的文件,通常是 /etc/ssh/ssh_known_hosts,保留一些对所有用户都可信赖的近程主机的公钥。
- 用法
SSH 次要用于近程登录。假设你要以用户名 user,登录近程主机 host,只有一条简略命令就能够了。
$ ssh user@host
如果本地用户名与近程用户名统一,登录时能够省略用户名。
$ ssh host
SSH 的默认端口是 22,也就是说,你的登录申请会送进近程主机的 22 端口。应用 p 参数,能够批改这个端口。
$ ssh -p 2222 user@host
下面这条命令示意,ssh 间接连贯近程主机的 2222 端口。
-
SSH key 登陆
应用明码登录,每次都必须输出明码,十分麻烦。SSH 提供了公钥登录,能够省去输出明码的步骤
用户将本人的公钥贮存在近程主机上。登录的时候,近程主机会向用户发送一段随机字符串,用户用本人的私钥加密后,再发回来。近程主机用当时贮存的公钥进行解密,如果胜利,就证实用户是可信的,间接容许登录 shell,不再要求明码。
这种办法要求用户必须提供本人的公钥。如果没有现成的,能够间接用 ssh-keygen 生成一个:
$ ssh-keygen
其中一步是私钥设置口令(passphrase),如果放心私钥的平安,这里能够设置一个。运行完结当前,在 $HOME/.ssh/ 目录下,会新生成两个文件:id_rsa.pub 和 id_rsa。前者是你的公钥,后者是你的私钥。这时再输出上面的命令,将公钥传送到近程主机 host 下面:
$ ssh-copy-id user@host
好了,从此你再登录,就不须要输出明码了。
如果还是不行,就关上近程主机的 /etc/ssh/sshd_config 这个文件,查看上面几行后面 ”#” 正文是否取掉。
RSAAuthentication yes
PubkeyAuthentication yes
AuthorizedKeysFile .ssh/authorized_keys
而后,重启近程主机的 ssh 服务。
// ubuntu 零碎
service ssh restart
// debian 零碎
/etc/init.d/ssh restart
-
其余 ssh 问题解决
a. 应用 git gui 生成公钥私钥:
git Gui>Help>Show ssh key > generate 产生的 keys 存储在 Users/Username/.ssh 文件夹中
b. win10 应用 git clone ssh://user@host//.git 的时候报错 no matching key exchange method found. Their offer: diffie-hellman-group1-sha1
解决: 在 windows Users/Username/.ssh 中增加一个名为 config 的文件,两头填上
Host infrashdev003.sh.intel.com
KexAlgorithms +diffie-hellman-group1-sha1
参考链接:
2 Ways to create private key in Linux