iTerm2:使用 CMD+click 通过 SSH 快速下载

use*_*113 4 ssh shortcut iterm iterm2

iTerm2 允许您单击链接(CMD+单击)并快速打开它。但是,当通过 SSH 工作时,这不起作用。是否可以启用此功能,以便我可以 CMD+单击文件,它会自动下载到本地计算机上的文件夹中?

谢谢!

Jak*_*fin 10

这实际上可以通过安装 Shell Integration 来实现。请注意,Shell 集成需要安装在您通过 ssh 连接的任何服务器上,而不仅仅是安装在本地计算机上。从这个链接

\n
\n

iTerm 最近推出了一项名为 Shell Integration 的功能。使用此功能,我们可以直接从 iTerm 2 方便地上传和下载文件。按下 Option 键将文件拖到窗口中会将文件上传到远程 ssh 连接。使用 ls 命令右键单击文件将显示包含下载文件的上下文列表。

\n
    \n
  1. 当 sshing 到远程服务器时,单击 \xe2\x80\x9ciTerm2->Install Shell Integration\xe2\x80\x9d。
  2. \n
  3. 确保服务器具有正确的 FQDN 作为主机名,并且可以通过此主机名进行连接。(你可以用hostname -f它来检查)
  4. \n
  5. 如果您\xe2\x80\x99使用私钥身份验证,那么您的.ssh目录中应该有id_rsa。但是,您还应该将 id_rsa.pub 放入 .ssh 目录中才能使用此功能。
  6. \n
\n
\n

很抱歉回答晚了,但我只是想做同样的事情并遇到了你的问题。我想一旦找到解决方案我就会发布我的发现。

\n


Rob*_*obM 10

我在 iTerm2 中使用 \xe2\x8c\x98+Clicking to download via SCP 并没有取得太大成功,因为我有一组复杂的规则,涉及~/.ssh/config.

\n

但我找到了一个优雅的解决方法:一个 shell 函数,它写入 STDOUT 以触发 iTerm2 捕获输出并将其保存为文件!

\n

我保留以下代码片段(Toolbelt \xe2\x86\x92 Snippets),执行它来定义命令download

\n
alias download="bash <(base64 -d <<<\'IyEvYmluL2Jhc2gKaWYgWyAkIyAtbHQgMSBdOyB0aGVuCiAgZWNobyAiVXNhZ2U6ICQwIGZpbGUg\nLi4uIgogIGV4aXQgMQpmaQpmb3IgZmlsZW5hbWUgaW4gIiRAIgpkbwogIGlmIFsgISAtciAiJGZp\nbGVuYW1lIiBdIDsgdGhlbgogICAgZWNobyBGaWxlICRmaWxlbmFtZSBkb2VzIG5vdCBleGlzdCBv\nciBpcyBub3QgcmVhZGFibGUuCiAgICBjb250aW51ZQogIGZpCgogIGZpbGVuYW1lNjQ9JChlY2hv\nIC1uICIkZmlsZW5hbWUiIHwgYmFzZTY0KQogIGZpbGVzaXplPSggJCh3YyAtYyAiJHtmaWxlbmFt\nZX0iKSApCiAgcHJpbnRmICJcMDMzXTEzMzc7RmlsZT1uYW1lPSR7ZmlsZW5hbWU2NH07c2l6ZT0k\ne2ZpbGVzaXplWzBdfToiCiAgYmFzZTY0IDwgIiRmaWxlbmFtZSIKICBwcmludGYgJ1xhJwpkb25l\nCg==\')"\n\n
Run Code Online (Sandbox Code Playgroud)\n

Base64 编码的字符串解码为:

\n
#!/bin/bash\nif [ $# -lt 1 ]; then\n  echo "Usage: $0 file ..."\n  exit 1\nfi\nfor filename in "$@"\ndo\n  if [ ! -r "$filename" ] ; then\n    echo File $filename does not exist or is not readable.\n    continue\n  fi\n\n  filename64=$(echo -n "$filename" | base64)\n  filesize=( $(wc -c "${filename}") )\n  printf "\\033]1337;File=name=${filename64};size=${filesize[0]}:"\n  base64 < "$filename"\n  printf \'\\a\'\ndone\n
Run Code Online (Sandbox Code Playgroud)\n

依赖于iTerm2 的下载协议

\n

显示来自 iTerm2 的通知的示例会话:

\n

远程主机上的 iTerm2 会话\nOSX 通知\niTerm2 菜单栏打开\niTerm2菜单栏子菜单

\n