为了iOS开发,入手了一台mbp。加上原来的tp T61,现在有两台本本可以把玩了。
两台电脑之间传输数据是个问题。以前就耳闻ssh可以建立加密的连接,于是找了些资料了解了下ssh的的基础知识,尝试了如何建立起ssh连接。
SSH為Secure Shell的縮寫。為建立在应用层和传输层基础上的安全协议。
传统的网络服务程序,如FTP、POP和Telnet其本质上都是不安全的;因为它们在网络上用明文传送数据、用户帐号和用户口令,很容易受到中间人(man-in-the-middle)攻击方式的攻击。就是存在另一个人或者一台机器冒充真正的服务器接收用户传给服务器的数据,然后再冒充用户把数据传给真正的服务器。
而SSH是目前较可靠,專为远程登录会话和其他网络服务提供安全性的协议。利用SSH协议可以有效防止远程管理过程中的信息泄露问题。透過SSH可以對所有传输的数据进行加密,也能够防止DNS欺骗和IP欺骗。
SSH之另一項優點為其传输的数据是经过压缩的,所以可以加快传输的速度。SSH有很多功能,它既可以代替Telnet,又可以为FTP、POP、甚至为PPP提供一个安全的「通道」。
了解这么多就好了,其实ssh连接也就是可以理解成经过加密的远程访问啦。
ssh连接是CS模型(客户端-服务器),服务器会对客户端进行验证。验证的方法不少,可以在sshd_config配置文件中设置(Ubuntu是/etc/ssh/sshd_config,mac下是/etc/sshd_config)
这里仅介绍几种最简单常见的。
直接输入所要登陆的用户的密码。这个是默认的方式。不需要修改配置文件。
客户端成功建立到服务器的连接后,自己的 .ssh/目录下会记录 服务器的ssh_host_rsa_key.pub(对应的机器的一个rsa加密的公钥)到lknown_hosts文件里。如果服务器之后改变了这个值,客户端需要采取办法修改对应的值,或者删除,否则无法登入。 ssh_host_rsa_key.pub 跟ssh的配置文件在同一个目录下。
建立的连接的两端分别是 客户端(client)和 服务器(server)。
客户端先使用 ssh-keygen 命令,生成私钥和公钥。(这里就牵扯到了一个经典的RSA加密算法,不多谈),其中私钥客户端自己保存,公钥发给服务器。如此一来,客户端要登录到服务器上实现远程控制的身份验证,则在本身的账户密码之外,多了一层保护。每次登陆,客户端的信息会先经过私钥加密,再传递给服务器,服务器匹配上公钥进行处理后,才能通过。
注意,配置文件可能也需要对应的修改,比如,笔者的版本是openssh5.9p1,需要取消掉 配置文件对 AuthorizedKeysFil %h/.ssh/authorized_keys 这一句的注释。只要删掉那个'#',就能执行rsa验证。如此情况下,就不需要输入密码验证了。
这个我自己还没怎么看明白= =。参见github中的解释
我把我的Mac OS X作为客户端,小黑的Ubuntu作为服务器端。使用第二种即rsa方法远程连接。
mac下自带的有,ubuntu下直接sudo apt-get install ssh就好了。(其实是开源的openssh,unix,linux平台下都可。ssh本身被商业化了,据说功能更多。)
在mac上用ssh-keygen生成密钥对。shell指令如下,然后跟着他的提示来好了。passphrase什么都不输入就好了,果断回避掉先。
$ ssh-keygen Generating public/private rsa key pair. Enter file in which to save the key (/Users/biaobiaoqi/.ssh/id_rsa): /Users/biaobiaoqi/.ssh/id_rsa Enter passphrase (empty for no passphrase): Enter same passphrase again: Your identification has been saved in /Users/biaobiaoqi/.ssh/id_rsa. Your public key has been saved in /Users/biaobiaoqi/.ssh/id_rsa.pub. The key fingerprint is: b7:c2:5c:3f:83:5e:5e:93:a4:42:db:51:d8:ac:07:66 [email protected] The key's randomart image is: +--[ RSA 2048]----+ | | | + | | E + | | o + | | S + o o | | o + * = . | | + = B + | | o + + . | | . . | +-----------------+
然后,传送id_rsa.pub到Ubuntu上,命名为authorized_keys。这个过程中默认使用了账号密码的验证方式。
$ scp id_rsa.pub [email protected]:authorized_keys The authenticity of host '192.168.1.101 (192.168.1.101)' can't be established. RSA key fingerprint is 81:6f:b6:be:3c:ca:b3:21:93:b4:65:05:fc:3e:c7:d8. Are you sure you want to continue connecting (yes/no)? yes Warning: Permanently added '192.168.1.101' (RSA) to the list of known hosts. [email protected]'s password: id_rsa.pub 100% 409 0.4KB/s 00:00
cd /etc/ssh vim sshd_config
找到
#AuthorizedKeysFil %h/.ssh/authorized_keys
AuthorizedKeysFil %h/.ssh/authorized_keys即可,位置无关)
mac下输入 ssh xxxx@hostAddress
由于之前已经完成了一次文件传输,已经在客户端的.ssh/know_hosts中记录下了服务器的key,又采用了rsa的验证方式,无需输入密码,即可建立链接。
意外
如果出现在登录时,出现如下问题:
Agent admitted failure to sign using the key
使用 ssh-add 指令将私钥 加进来 (根据个人的密匙命名不同更改 id_rsa)
# ssh-add ~/.ssh/id_rsa
用scp命令试用了下。发现传输速度最高也就1.1M。
网上有说法是开启-C选项后速度会翻一倍左右,但我的测试结果仍然是最多1.1M。也使用了rsync命令,同样是1.1M。
或许是路由器的限速吧= =。以后再查了。
另附参考文献一篇,讲的很不错,点这里