英文的表达比中文的好写多了,呵呵。Anyway, let's dive into some real stuff.
0. Before
我用的是Dreamhost,一直有在Terminal下不厌其烦地登陆跟输入密码。最不喜欢的是在dock下有个大大的icon。所以找了好久,终于在 Kimmo Suominen 的blog里找到了答案。本文基于 Kimmo Souminen 的 SSH 而写成的。
很明显用SSH Tunnel的人都知道要达到目的,我们要在Terminal下运行这个类似的command:
ssh username@domain.com -D 7142
有了-D就建立起了隧道链接,本地的端口设上7142就能连上了。不过更加人人皆知的是Mac下的ssh是木有-P这个密码argument的。于是乎就有了此文了。
1. 保存SSH密码,自动登陆
首先我们要按照下面一步一步地把我们的密码保存到本地。
先输入下面这条命令生成密码文件。
ssh-keygen -t rsa
之后:
Generating public/private rsa key pair.
Enter file in which to save the key (/Users/benjaminl/.ssh/id_rsa): [按回车]
Enter passphrase (empty for no passphrase): [输入文件加密密码,而非连接ssh的密码,可为空]
Enter same passphrase again: [再次输入文件加密密码]
Your identification has been saved in /Users/benjaminl/.ssh/id_rsa.
Your public key has been saved in /Users/benjaminl/.ssh/id_rsa.pub.
The key fingerprint is:
31:55:d9:ca:79:d3:0d:a0:a0:33:8c:cf:c0:87:8f:5e benjaminl@Benjamins-MacBook-Pro.local
The key's randomart image is:
+--[ RSA 2048]----+
| . ..o+ |
| . + . o .. o |
| = * o .. o o.|
| B o o + o o|
| . E S . . |
| . . |
| . |
| |
| |
+-----------------+
这样,密码文件就生成成功了。
我们刚刚保存的文件是系统文件,所有的信息都会保存在那。所以嘛,还是自己copy一下只给自己用,也免得出事了不知道哪办。运行下面两条命令。
cd ~/.ssh
cp id_rsa.pub authorized_keys
然后我们要把文件跟登陆密码link up才能实现在登陆的时候让ssh自动调用保存了的密码。
scp -p ~/.ssh/authorized_keys username@domain.com:.ssh/
username@domain.com's password: [输入你ssh的登陆密码]
这时候,我们保存密码的工作就完成了。
现在你只要在Terminal下输入下面的命令,不用输入密码就能自动登陆。
ssh username@yourdomain.com -D 7142
2. 开机自动后台登陆
我的想法就是不用弹出个SSH也不借助任务第三方工具来做后台运行。很自然地想到要做个daemon或者agent神马的。如果你觉得很陌生,想想VMWare Fusion或者Parallel啥的会加个plist的文件在开机的时候调用,不然就想iPhone的优化就是删除这些launch的时候会调用的daemon。
我现在用的是这个,将下面的内容保存为com.ssh.tunnel.plist,或者点击此处下载。如果是只为当前用户启用,可以保存到~/Library/LaunchAgents/,想全局用户使用,就保存到/System/Library/LaunchDaemons/。
<pre><?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>Debug</key>
<true/>
<key>KeepAlive</key>
<dict>
<key>NetworkState</key>
<true/>
</dict>
<key>Label</key>
<string>com.ssh.tunnel</string>
<key>LimitLoadToSessionType</key>
<string>Aqua</string>
<key>ProgramArguments</key>
<array>
<string>/usr/bin/ssh</string>
<string>-a</string>
<string>-x</string>
<string>-k</string>
<string>-C</string>
<string>-v</string>
<string>-D</string>
<string>7142</string>
<string>username@yourdomain.com</string>
<string>sleep</string>
<string>3600</string>
</array>
<key>RunAtLoad</key>
<true/>
</dict>
</plist>
这个文件保证了:a) 开机自动后台运行了SSH的登陆命令并且建立隧道,端口是7142;b) 如果断开自动重连。
如果你对命令还有别的需求,可以在那堆string里面添加。
这时,你就已经完成了所有设置,并在重开机之后就会直接连上隧道。
3. 后话
之后,你就可以在Network Preference或者用Firefox AutoProxy连了。我用的是全局+PAC。
如果有什么不明白的,feel free to contact me。