Как отправить данные в локальный буфер обмена из удаленного сеанса SSH
пограничный вопрос ServerFault, но я Программирование некоторые скрипты оболочки, поэтому я пытаюсь здесь сначала :)
большинство * nixes имеют команду, которая позволит вам передавать/перенаправлять вывод в локальный буфер обмена/pasteboard и извлекать из него. В OS X эти команды
pbcopy, pbpaste
есть ли в любом случае, чтобы реплицировать эту функциональность в то время как SSHed на другой сервер? То есть,
- я использую компьютер А.
- открыть окно терминала
- Я SSH на компьютер B
- я запускаю команду на компьютере B
- вывод компьютера B перенаправляется или автоматически копируется в буфер обмена компьютера A.
и да, я знаю, что могу просто (содрогнуться) использовать мышь для выбора текста из команды, но я так привык к рабочему процессу вывода pipping непосредственно в буфер обмена, что я хочу то же самое для моих удаленных сеансов.
код полезен, но общие подходы также приветствуются.
9 ответов:
Я воскрешаю эту тему, потому что я искал такое же решение, и я нашел тот, который работает для меня. Это незначительная модификация предложения от OSX Daily.
в моем случае я использую терминал на моей локальной машине OSX для подключения к серверу linux через SSH. Как и OP, я хотел иметь возможность передавать небольшие фрагменты текста из терминала в мой локальный буфер обмена, используя только клавиатуру.
суть решения:
commandThatMakesOutput | ssh desktop pbcopy
при запуске в сеансе ssh на удаленном компьютере, эта команда принимает вывод commandThatMakesOutput (например, ls, pwd) и передает вывод в буфер обмена локального компьютера (имя или IP "desktop"). Другими словами, он использует вложенный ssh: вы подключены к удаленному компьютеру через один сеанс ssh, вы выполняете команду там, а удаленный компьютер подключается к вашему рабочему столу через другой сеанс ssh и помещает текст в ваш буфер.
он требует, чтобы ваш рабочий стол был настроен как ssh-сервер (который я оставляю вам и google). Это намного проще, если вы настроили ключи ssh для облегчения быстрого использования ssh, предпочтительно используя парольную фразу для каждого сеанса или все, что требуется для вашей безопасности.
другие примеры:
ls | ssh desktopIpAddress pbcopy pwd | ssh desktopIpAddress pbcopy
для удобства, я создал файл bash, чтобы сократить текст, необходимый после трубы:
#!/bin/bash ssh desktop pbcopy
в моем случае, я использую специально назвали ключ
Я сохранил его с именем файла cb (моя мнемоника (буфер обмена). Поместите скрипт где-нибудь на своем пути, сделайте его исполняемым и вуаля:
ls | cb
мой любимый способ-это
ssh [remote-machine] "cat log.txt" | xclip -selection c
. Это наиболее полезно, когда вы не хотите (или не можете) SSH с удаленного на локальный.редактировать: на Cygwin
ssh [remote-machine] "cat log.txt" > /dev/clipboard
.Edit: полезный комментарий от nbren12:
почти всегда можно настроить обратное соединение ssh с помощью перенаправления портов SSH. Просто добавьте
RemoteForward 127.0.0.1:2222 127.0.0.1:22
к записи сервера в вашем локальном.ssh/config
, а затем выполнитьssh -p 2222 127.0.0.1
на удаленной машине, которая затем перенаправляет подключение к локальный компьютер. - nbren12
найдено отличное решение, которое не требует обратного ssh соединения!
вы можете использовать xclip на удаленном хосте, а также SSH X11 forwarding & XQuartz в системе OSX.
для этого:
- установить XQuartz (Я сделал это с soloist + pivotal_workstation:: XQuartz recipe, но не обязательно)
- Запустить XQuartz.приложение
- Настройки Открытия Можно Использовать (+
,
)- убедится "Включить Синхронизацию" и "обновление картона при изменении буфера обмена" это
ssh -X remote-host "echo 'hello from remote-host' | xclip -selection clipboard"
существуют различные инструменты для доступа к выбору 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
в зависимости от того, что вы хотите.
Это мое решение, основанное на обратном туннеле 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&
оно начнет выход трубопровода НК к процессу склип и респавнинг после получать часть данных
затем запустите 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. Вот как это работает для меня. Наслаждаться.
обратный туннельный порт на 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-сессия есть способ начать туннель, но я не хочу отпугивать людей от того, что на самом деле не так плохо, как кажется. Но я добавлю детали позже, если увижу какой-либо интерес
не один-лайнер, но не требует дополнительного ssh.
- установить
netcat
при необходимости- использовать termbin:
cat ~/some_file.txt | nc termbin.com 9999
. Это скопирует выходные данные вtermbin
веб-сайт и печатает URL-адрес для вашего вывода.- посетите этот url с Вашего компьютера, вы получите свой выход
конечно, не используйте его для конфиденциального контента.
@rhileighalmgren решение хорошее, но pbcopy будет раздражающе копировать последний символ "\n", я использую "head", чтобы удалить последний символ, чтобы предотвратить это:
#!/bin/bash head -c -1 | ssh desktop pbcopy
мое полное решение здесь : http://taylor.woodstitch.com/linux/copy-local-clipboard-remote-ssh-server/
самое простое решение из всех, если вы находитесь на OS X с помощью терминала, и Вы были ssh'ING вокруг в удаленном сервере и хотите, чтобы захватить результаты текстового файла или журнала или csv, просто:
1)
Cmd-K
чтобы очистить выход терминала2)
cat <filename>
для отображения содержимого файла3)
Cmd-S
для сохранения вывода терминалавы будете иметь, чтобы удалить первую строку и последнюю строку файла, но этот способ немного проще, чем полагаться на другие устанавливаемые пакеты, "обратные туннели" и пытаться иметь статический IP и т. д.