代码之家  ›  专栏  ›  技术社区  ›  Alana Storm

如何从远程ssh会话将数据发送到本地剪贴板

  •  112
  • Alana Storm  · 技术社区  · 15 年前

    边界服务器故障问题,但我 程序设计 一些shell脚本,所以我首先在这里尝试:)

    大多数*nixes都有一个命令,允许您将输出管道/重定向到本地剪贴板/粘贴板,并从中检索。在OS X上,这些命令是

    pbcopy, pbpaste 
    

    在ssh连接到另一个服务器时,是否仍要复制此功能?也就是说,

    1. 我在用电脑A。
    2. 我打开终端窗口
    3. i ssh到计算机b
    4. 我在计算机B上运行命令
    5. 计算机B的输出被重定向或自动复制到计算机A的剪贴板。

    是的,我知道我可以用鼠标从命令中选择文本,但是我已经习惯了直接将输出映射到剪贴板的工作流程,我希望远程会话也能这样。

    代码是有用的,但一般的方法也是值得赞赏的。

    9 回复  |  直到 6 年前
        1
  •  62
  •   rhileighalmgren    13 年前

    我正在重新整理这条线,因为我一直在寻找同样的解决方案,我找到了一个适合我的解决方案。这是对 OSX Daily .

    在我的例子中,我使用本地OSX机器上的终端通过ssh连接到Linux服务器。和OP一样,我希望只使用键盘就可以将少量文本从终端传输到本地剪贴板。

    解决方案的本质:

    commandThatMakesOutput | ssh desktop pbcopy
    

    当在到远程计算机的ssh会话中运行时,此命令获取 使人失望的命令 (例如ls、pwd)并将输出传输到本地计算机的剪贴板(桌面的名称或IP)。换句话说,它使用嵌套的ssh:您通过一个ssh会话连接到远程计算机,在那里执行命令,远程计算机通过不同的ssh会话连接到桌面,并将文本放入剪贴板。

    它要求你的桌面被配置为一个ssh服务器(我留给你和谷歌)。如果您已经设置了ssh密钥以方便快速使用ssh,最好是使用每个会话的密码短语,或者您的安全性需要的任何内容,那么就容易多了。

    其他例子:

    ls  | ssh desktopIpAddress pbcopy
    pwd |  ssh desktopIpAddress pbcopy
    

    为了方便起见,我创建了一个bash文件来缩短管道后面所需的文本:

    #!/bin/bash
    ssh desktop pbcopy
    

    在我的例子中,我使用了一个特别命名的密钥

    我用文件名保存了它 炭黑 (我的助记符(剪贴板)。将脚本放在您的路径中的某个位置,使其可执行,然后看:

    ls | cb
    
        2
  •  89
  •   Dominykas Mostauskis    6 年前

    我最喜欢的方法是 ssh [remote-machine] "cat log.txt" | xclip -selection c . 当您不想(或不能)从远程到本地的ssh时,这是最有用的。

    编辑:CygWin ssh [remote-machine] "cat log.txt" > /dev/clipboard .

    编辑:来自NBREN12的有用评论:

    几乎总是可以使用ssh端口转发设置反向ssh连接。只要添加 RemoteForward 127.0.0.1:2222 127.0.0.1:22 到本地服务器的条目 .ssh/config ,然后执行 ssh -p 2222 127.0.0.1 在远程计算机上,然后将连接重定向到本地计算机。A.N.BRNE12

        3
  •  23
  •   TrinitronX    11 年前

    找到了一个不需要反向ssh连接的伟大解决方案!

    您可以在远程主机上使用xclip,在OSX系统上使用ssh x11转发和xquartz。

    设置:

    1. 安装 XQuartz (我这样做是为了 soloist + pivotal_workstation::xquartz recipe ,但你不必)
    2. 运行XQualth.App
    3. 打开XQuartz首选项( kb_command + , )
    4. 确保 “启用同步” “剪贴板更改时更新粘贴板” 被检查 XQuartz Preferences window example
    5. ssh -X remote-host "echo 'hello from remote-host' | xclip -selection clipboard"
        4
  •  7
  •   ephemient    15 年前

    有多种工具可以访问x11选项,包括 xclip XSel .注意,x11传统上有多个选择,大多数程序对剪贴板和主选择都有一定的理解(两者不同)。Emacs也可以使用二次选择,但这很少见,而且没有人真正知道如何处理剪切缓冲区…

    $ xclip -help
    Usage: xclip [OPTION] [FILE]...
    Access an X server selection for reading or writing.
    
      -i, -in          read text into X selection from standard input or files
                       (default)
      -o, -out         prints the selection to standard out (generally for
                       piping to a file or program)
      -l, -loops       number of selection requests to wait for before exiting
      -d, -display     X display to connect to (eg localhost:0")
      -h, -help        usage information
          -selection   selection to access ("primary", "secondary", "clipboard" or "buffer-cut")
          -noutf8      don't treat text as utf-8, use old unicode
          -version     version information
          -silent      errors only, run in background (default)
          -quiet       run in foreground, show what's happening
          -verbose     running commentary
    
    Report bugs to <astrand@lysator.liu.se>
    
    $ xsel -help
    Usage: xsel [options]
    Manipulate the X selection.
    
    By default the current selection is output and not modified if both
    standard input and standard output are terminals (ttys).  Otherwise,
    the current selection is output if standard output is not a terminal
    (tty), and the selection is set from standard input if standard input
    is not a terminal (tty). If any input or output options are given then
    the program behaves only in the requested mode.
    
    If both input and output is required then the previous selection is
    output before being replaced by the contents of standard input.
    
    Input options
      -a, --append          Append standard input to the selection
      -f, --follow          Append to selection as standard input grows
      -i, --input           Read standard input into the selection
    
    Output options
      -o, --output          Write the selection to standard output
    
    Action options
      -c, --clear           Clear the selection
      -d, --delete          Request that the selection be cleared and that
                            the application owning it delete its contents
    
    Selection options
      -p, --primary         Operate on the PRIMARY selection (default)
      -s, --secondary       Operate on the SECONDARY selection
      -b, --clipboard       Operate on the CLIPBOARD selection
    
      -k, --keep            Do not modify the selections, but make the PRIMARY
                            and SECONDARY selections persist even after the
                            programs they were selected in exit.
      -x, --exchange        Exchange the PRIMARY and SECONDARY selections
    
    X options
      --display displayname
                            Specify the connection to the X server
      -t ms, --selectionTimeout ms
                            Specify the timeout in milliseconds within which the
                            selection must be retrieved. A value of 0 (zero)
                            specifies no timeout (default)
    
    Miscellaneous options
      -l, --logfile         Specify file to log errors to when detached.
      -n, --nodetach        Do not detach from the controlling terminal. Without
                            this option, xsel will fork to become a background
                            process in input, exchange and keep modes.
    
      -h, --help            Display this help and exit
      -v, --verbose         Print informative messages
      --version             Output version information and exit
    
    Please report bugs to <conrad@vergenet.net>.
    

    总之,你应该尝试 xclip -i / xclip -o xclip -i -sel clip / xclip -o -sel clip xsel -i / xsel -o xsel -i -b / xsel -o -b ,取决于您想要什么。

        5
  •  5
  •   Sridhar Sarnobat    6 年前

    ssh服务器上的反向隧道端口

    所有现有的解决方案都需要:

    • 客户机上的x11(如果有, xclip 在服务器上工作得很好)或者
    • 客户机和服务器位于同一网络中(如果您正在工作中尝试访问家庭计算机,则不是这样)。

    这是另一种方法,不过您需要修改如何将ssh导入计算机。

    我已经开始用这个了,它看起来没有那么吓人,所以试试看。

    客户端(ssh会话启动)

    ssh username@server.com -R 2000:localhost:2000
    

    (提示:将此设置为键绑定,这样您就不必键入它了)

    客户端(另一个选项卡)

    nc -l 2000 | pbcopy
    

    注意:如果您没有 pbcopy 然后只是 tee 它是一个文件。

    服务器(ssh会话内部)

    cat some_useful_content.txt | nc localhost 2000
    

    其他音符

    事实上,即使您正在进行ssh会话,也有一种方法可以启动隧道,但我不想让人们远离看起来并不那么糟糕的东西。但如果我有兴趣的话,我会在以后再补充细节

        6
  •  4
  •   maxbellec    6 年前

    不是单行线,但是 不需要额外的ssh .

    • 安装 netcat 如有必要
    • 使用 termbin : cat ~/some_file.txt | nc termbin.com 9999 . 这将把输出复制到 termbin 网站并打印输出的URL。
    • 从您的计算机访问该URL,您将获得输出

    当然,不要将其用于敏感内容。

        7
  •  3
  •   Krzysztof Księżyk    7 年前

    这是我基于ssh反向隧道、netcat和xclip的解决方案。

    首先在工作站上创建脚本(例如clipboard daemon.sh):

    #!/bin/bash
    HOST=127.0.0.1
    PORT=3333
    
    NUM=`netstat -tlpn 2>/dev/null | grep -c " ${HOST}:${PORT} "`
    if [ $NUM -gt 0 ]; then
        exit
    fi
    
    while [ true ]; do
        nc -l ${HOST} ${PORT} | xclip -selection clipboard
    done
    

    在后台启动。

    ./clipboard-daemon.sh&
    

    接收到部分数据后,将启动NC管道输出到XCLIP和重新绘制过程。

    然后启动到远程主机的ssh连接:

    ssh user@host -R127.0.0.1:3333:127.0.0.1:3333
    

    登录远程设备时,请尝试以下操作:

    echo "this is test" >/dev/tcp/127.0.0.1/3333
    

    然后尝试在工作站上粘贴

    当然,您可以编写包装脚本,首先启动clipboard-daemon.sh,然后再启动ssh会话。这就是我的工作方式。享受。

        8
  •  1
  •   Taylor Hawkes    9 年前

    @rhileighalmgren解决方案很好,但是pbcopy会恼人地复制最后一个\n“字符,我使用”head“删除最后一个字符以防止:

    #!/bin/bash
    head -c -1 |  ssh desktop pbcopy
    

    我的完整解决方案如下: http://taylor.woodstitch.com/linux/copy-local-clipboard-remote-ssh-server/

        9
  •  1
  •   tw0000    6 年前

    最简单的解决方案是,如果您在使用终端的OS X上,并且一直在远程服务器上进行ssh,并且希望获取文本文件、日志或csv的结果,那么只需:

    1) Cmd-K 清除终端输出

    2) cat <filename> 显示文件内容

    3) Cmd-S 保存终端输出

    您将手动删除文件的第一行和最后一行,但此方法比依赖其他要安装的包、“反向隧道”和尝试使用静态IP等简单一些。