我其实也想做同样的事情,但没有人写出来,所以我今天想通了。
这里有 2 个必需部分和 3 个可选部分:
- 在两台计算机上启用 ssh 登录(必需)
- 设置从远程计算机到您的计算机的 ssh 隧道(必需)
- 为 ssh 隧道设置别名(可选)
- 在远程机器上为 TextWrangler 设置别名(可选)
- 设置 ssh 密钥,这样您就不必每次都输入密码(可选)
您需要能够从本地 ssh 到远程才能运行命令,并且您需要能够从远程 ssh 到本地以便它可以向 TextWrangler 发送命令。
要设置 ssh 隧道,您需要在本地机器上运行如下命令:
ssh -f -N -R 10022:localhost:22 [username on remote machine]@[remote machine hostname]
-f 和 -N 标志将 ssh 置于后台,让您留在您的机器上。 -R 标志将远程计算机上的端口绑定到本地计算机上的端口。在端口 10022 上与远程计算机联系的任何内容都将发送到本地计算机上的端口 22。远程端口可以是您想要的任何端口,但您应该选择一个 > 1024 的端口以避免冲突,因此您不必是 root。我选择 10022 是因为它类似于 ssh 的默认端口 22。将括号替换为您的用户名和机器名。
您需要在登录后运行一次。为了让您自己更轻松地执行命令,您可以在 bash 配置文件中添加别名。将以下内容添加到您本地的~/.bash_profile:
alias open-tunnel='ssh -f -N -R 10022:localhost:22 [username on remote machine]@[remote machine hostname]'
当然,你可以选择任何你喜欢的别名。
一旦你建立了隧道,你就可以在远程机器上使用这样的命令:
ssh -p 10022 [username on local machine]@localhost "edit sftp://[username on remote machine]@[remote machine hostname]//absolute/path/to/file.txt"
-p 标志表示使用端口 10022(或您之前选择的任何端口)。这将导致远程机器连接到您的本地机器并在不打开交互式 ssh 会话的情况下执行双引号中的命令。引号中的命令是您将在本地计算机上运行以在 TextWrangler 中打开远程文件的命令。
为了让您自己更轻松地执行命令,您可以在 bash 配置文件中添加一个函数。将以下内容添加到您的远程~/.bash_profile:
function edit { if [[ ${1:0:1} = "/" ]]; then abs_path="$1"; else abs_path="`pwd`/$1"; fi; ssh -p 10022 [username on local machine]@localhost "edit sftp://[username on remote machine]@[remote machine hostname]/$abs_path"; }
这是假设您没有在远程计算机上安装 TextWrangler 命令行工具。如果这样做,则应将该函数命名为 edit 以外的名称。例如,tw。这里${1:0:1}看的是函数第一个参数的第一个字符,应该是文件路径。如果它不以/ 开头,我们通过将当前工作目录(pwd)添加到开头来计算绝对路径。现在,如果您在/home/jdoe/some/directory/ 的远程计算机上运行edit some/other/directory/file.txt,则将在本地计算机上执行以下操作:
edit sftp://[username on remote machine]@[remote machine hostname]//home/jdoe/some/directory/some/other/directory/file.txt
最后,您应该在两个方向上设置 ssh 密钥,这样就不会每次都提示您输入密码。这是别人写的指南:http://pkeck.myweb.uga.edu/ssh/