Mac开机后台自动连SSH Tunnel越某墙
08072011 / 3 Comments / 计算机相关
英文的表达比中文的好写多了,呵呵。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。
你好,你按照教程操作.但是碰到了错误.
这个步骤的时候.我按照提示操作.提示错误:
scp: .ssh/: Is a directory
然后我们要把文件跟登陆密码link up才能实现在登陆的时候让ssh自动调用保存了的密码。
scp -p ~/.ssh/authorized_keys username@domain.com:.ssh/
username@domain.com's password: [输入你ssh的登陆密码]
[Reply]
真的可以开机自动连接咩
[Reply]
@greghe728, 真的可以开机自动连接
[Reply]
br>