从入门到精通:构建SSH安全通道(1)
从入门到精通:构建SSH安全通道(1)
SSH命令行实用程序是远程系统的工作人员安全访问的通道。SSH代表着“安全外壳”,所以你可能认为其最常用的使用方法就是用作一个远程外壳。也许这是其最常见的应用,但并非使用SSH的唯一的有趣方法。
一、连接、执行远程命令并使用授权密钥
1、创建一个连接
为通过SSH进行通信,你首先需要建立一个到达远程服务器的连接。使用SSH命令行实用程序时,我们有很多参数选择。最基本的命令行参数是:
1、SSH IP地址
在这里,IP地址就是你想要连接的服务器的IP地址。下面是一个简单的例子:
abc:~ jmjones$ ssh 192.168.1.20
The authenticity of host '192.168.1.20 (192.168.1.20)' can't be established.
RSA key fingerprint is 24:1e:2e:7c:3d:a5:cd:a3:3d:71:1f:6d:08:3b:8c:93.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '192.168.1.20' (RSA) to the list of known hosts.
注意,上面的消息中有这样一行“The authenticity of host '192.168.1.20 (192.168.1.20)' can't be established.”。这条消息意味着笔者的SSH 客户端并不知道远程服务器。笔者在这里用了“客户端”,因为SSH命令行实用程序初始化了网络并使其成为网络客户端。
在上面的消息中,SSH程序还询问作者是否希望继续连接(Are you sure you want to continue connecting (yes/no)? )笔者的回答是“yes”,因为笔者知道这台服务器正是笔者想连接的服务器。一般而言,对此问题回答“yes”是比较安全的。(但如果不怀好意的家伙假冒了你想连接的服务器,这样做就危险了。)在回答“yes”继续连接后,笔者的客户端用下面的内容更新了文件$HOME/.ssh/known_hosts:
192.168.1.20 ssh-rsa
^4rsa5jmjones6cd7jmjones8^/^9cd10^+9^11yc12yc13rsa14AAAAB15^+^16r
sa17AAAAB18^99u2^19oT20oT21^7N7^22AAAAB23^+^24cd25^5f+^26ykuwQcXI
27EAAAABIwAAAQEAvb28jmjones29oT30commandline31^2Ax3J88^32commandl
ine33yc34^+rOB+gOdRaD+NTkuzrB/^38oT39^50L6^40oT41AAAAB42^61rq+9v+4^
44AAAAB45rsa46ykuwQcXI47^5q1P11^48AAAAB49gcgPr50^==
在笔者再次连接到同样的服务器时,笔者的SSH客户端将检查“known_hosts”文件,检查是否与上次的服务器相同。如果服务器传回的信息与“known_hosts”文件中的信息不匹配,就会看到类似于下面的消息:
abc:~ jmjones$ ssh 192.168.1.20
WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!
IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY!
Someone could be eavesdropping on you right now (man-in-the-middle attack)!
It is also possible that the RSA host key has just been changed.
The fingerprint for the RSA key sent by the remote host is
24:1e:2e:7c:3d:a5:cd:a3:3d:71:1f:6d:08:3b:8c:93.
Please contact your system administrator.
Add correct host key in /Users/jmjones/.ssh/known_hosts to get rid of this message.
Offending key in /Users/jmjones/.ssh/known_hosts:1
RSA host key for 192.168.1.20 has changed and you have requested strict checking.
Host key verification failed.
2、口令验证
继续上面的例子。在回答了“yes”后,程序要求笔者输入口令。下面是此次交互的部分信息:
jmjones@192.168.1.20's password:
Be careful.
No mail.
Last login: Tue Dec 30 06:36:20 2008 from abc
jmjones@oksir:~$
笔者键入了口令,然后ssh客户端与远程服务器建立了一个交互连接。在此,可以看出登录到一个Linux服务器的证据,如上次登录的时间。
3、授权密钥
如果我们不想在每次登录时都键入口令该怎么办?或者,笔者是一个系统管理员,希望让服务器更强健,让不法之徒难以猜测,又该如何呢?我们可以使用一个公钥/私钥对来让登录到服务器的过程更安全更简单。
为使用公钥/ 私钥对,我们必须创建它。可通过在命令行使用ssh –keygen程序来达此目的。其实,该命令还是有许多参数的,如密钥的类型、想要创建的文件名、密钥文件的注释等,不过我们完全只使用默认选项。下面是笔者在没有使用任何参数时的结果:
abc:~ jmjones$ ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/Users/jmjones/.ssh/id_rsa):
Created directory '/Users/jmjones/.ssh'.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /Users/jmjones/.ssh/id_rsa.
Your public key has been saved in /Users/jmjones/.ssh/id_rsa.pub.
The key fingerprint is:
fe:e9:fa:f5:e2:4e:a1:6c:9e:9e:20:a4:cc:ec:4f:62 jmjones@abc
The key's randomart image is:
+--[ RSA 2048]----+
| |
| |
| |
| |
| . S . |
| + o . . . . |
| E o o + o |
| o o . = *.. |
| ... .=Xoo.. |
+-----------------+
笔者接受了“id_rsa”作为密钥文件,还接受了不输入任何口令短语的默认选项。如果选择了给文件添加一个口令短语,那么在每次使用时都得输入此短语。运行ssh-keygen的结果是在$HOME/.ssh文件中生成了两个文件:
abc:~ jmjones$ ls -l ~/.ssh/
total 16
-rw------- 1 jmjones staff 1675 Dec 30 17:37 id_rsa
-rw-r--r-- 1 jmjones staff 400 Dec 30 17:37 id_rsa.pub
“id_rsa”是笔者的私钥。笔者并不希望任何人可以访问这个文件,以防止其他人冒充自己。注意,对“id_rsa”的限制强于对“id_rsa.pub”的限制。笔者可以将此文件传送给希望连接的任何人。不用担心,任何人都无法猜测我们的私钥是什么。
评论暂时关闭