【发布时间】:2017-04-17 14:26:54
【问题描述】:
iTerm2 允许您单击链接(CMD+单击)并快速打开它。但是,在通过 SSH 工作时,这不起作用。是否可以启用此功能,以便我可以 CMD+单击文件,它会自动下载到我本地机器上的文件夹中?
谢谢!
【问题讨论】:
标签: ssh shortcuts iterm2 iterm
iTerm2 允许您单击链接(CMD+单击)并快速打开它。但是,在通过 SSH 工作时,这不起作用。是否可以启用此功能,以便我可以 CMD+单击文件,它会自动下载到我本地机器上的文件夹中?
谢谢!
【问题讨论】:
标签: ssh shortcuts iterm2 iterm
这实际上可以通过安装 Shell 集成来实现。请注意,Shell 集成将需要安装在您要通过 ssh 连接到的任何服务器上,而不仅仅是在您的本地计算机上。来自this link:
iTerm 最近推出了一项名为 Shell 集成的功能。使用此功能,我们可以方便地直接从 iTerm 2 上传和下载文件。按 Option 键时将文件拖到窗口中,将文件上传到远程 ssh 连接。使用 ls 命令右键单击文件将弹出一个包含下载文件的上下文列表。
- ssh 进入远程服务器时点击“iTerm2->Install Shell Integration”。
- 确保服务器具有正确的 FQDN 作为主机名,并且可以通过该主机名进行连接。 (可以使用
hostname -f查看)- 如果您使用私钥身份验证,那么您的 .ssh 目录中应该有 id_rsa。但是,您还应该将 id_rsa.pub 放在您的 .ssh 目录中以使用此功能。
很抱歉回答迟了,但我只是想做同样的事情并遇到了你的问题。以为找到解决方案后我会发布我的发现。
【讨论】:
我在 iTerm2 中使用 ⌘+Clicking to download via SCP 并没有取得多大成功,因为我在~/.ssh/config 中有一套涉及跳转主机的复杂规则。
但我找到了一个优雅的解决方法:一个 shell 函数,它写入 STDOUT 以触发 iTerm2 捕获输出并将其保存为文件!
我保留以下 sn-p (Toolbelt → Snippets) 来定义命令download:
alias download="bash <(base64 -d <<<'IyEvYmluL2Jhc2gKaWYgWyAkIyAtbmUgMSBdOyB0aGVuCiAgZWNobyAiVXNhZ2U6IGRvd25sb2Fk
LnNoIGZpbGUgLi4uIgogIGV4aXQgMQpmaQpmb3IgZm4gaW4gIiRAIgpkbwogIGlmIFsgLXIgIiRm
biIgXSA7IHRoZW4KICAgIHByaW50ZiAnXDAzM10xMzM3O0ZpbGU9bmFtZT0nYGVjaG8gLW4gIiRm
biIgfCBiYXNlNjRgIjsiCiAgICB3YyAtYyAiJGZuIiB8IGF3ayAne3ByaW50ZiAic2l6ZT0lZCIs
JDF9JwogICAgcHJpbnRmICI6IgogICAgYmFzZTY0IDwgIiRmbiIKICAgIHByaW50ZiAnXGEnCiAg
ZWxzZQogICAgZWNobyBGaWxlICRmbiBkb2VzIG5vdCBleGlzdCBvciBpcyBub3QgcmVhZGFibGUu
CiAgZmkKZG9uZQo=')"
base64 编码的字符串解码为:
#!/bin/bash
if [ $# -ne 1 ]; then
echo "Usage: download.sh file ..."
exit 1
fi
for fn in "$@"
do
if [ -r "$fn" ] ; then
printf '\033]1337;File=name='`echo -n "$fn" | base64`";"
wc -c "$fn" | awk '{printf "size=%d",$1}'
printf ":"
base64 < "$fn"
printf '\a'
else
echo File $fn does not exist or is not readable.
fi
done
哪个依赖iTerm2's download protocol
显示来自 iTerm2 的通知的示例会话:
【讨论】: