Borderline ServerFault вопрос, но я программирую некоторые сценарии оболочки, поэтому сначала я пытаюсь здесь :)
У большинства * nixes есть команда, которая позволит вам перенаправлять / перенаправлять вывод в локальный буфер обмена / монтажный буфер и извлекать из него. На OS X эти команды
pbcopy, pbpaste
Есть ли способ реплицировать эту функциональность при SSHed на другой сервер? То есть,
- Я использую Компьютер А.
- Открываю окно терминала
- Я SSH к компьютеру B
- Я запускаю команду на компьютере B
- Выход компьютера B перенаправляется или автоматически копируется в буфер обмена компьютера A.
И да, я знаю, что могу просто (дрожать) использовать мою мышь, чтобы выбрать текст из команды, но я настолько привык к рабочему процессу передачи вывода непосредственно в буфер обмена, что я хочу того же для своих удаленных сессий.
Код полезен, но общие подходы также приветствуются.
:'<,'>w !ssh desktop pbcopy
-e none
флаг ssh, описанный здесь: unix.stackexchange.com/questions/210615/…Мой любимый способ
ssh [remote-machine] "cat log.txt" | xclip -selection c
. Это наиболее полезно, когда вы не хотите (или не можете) ssh из удаленного в локальный.Редактировать: на Cygwin
ssh [remote-machine] "cat log.txt" > /dev/clipboard
.Редактировать: полезный комментарий от nbren12:
источник
ssh [remote-machine] "cat log.txt" | pbcopy
cat
чтобы получить эту работу на Cygwin Windows 8:ssh [remote-machine] "cat log.txt" | cat > /dev/clipboard
(конечно, моя удаленная команда не былаcat
, это было что - то еще внутри бродячей виртуальной машины , так что я на самом деле бежалиvagrant ssh -c "command" | cat > /dev/clipboard
)RemoteForward 127.0.0.1:2222 127.0.0.1:22
к серверам запись в вашем локальном компьютере.ssh/config
, а затем выполнитеssh -p 2222 127.0.0.1
на удаленном компьютере, который затем перенаправит соединение на локальный компьютер.Нашел отличное решение, которое не требует обратного ssh-соединения!
Вы можете использовать xclip на удаленном хосте вместе с пересылкой ssh X11 и XQuartz в системе OSX.
Чтобы настроить это:
,
)ssh -X remote-host "echo 'hello from remote-host' | xclip -selection clipboard"
источник
ssh remote-host "echo 'hello from remote-host' | pbcopy
? Это был бы отличный ответ, если бы он работал примерно так:ssh -X remote-host
затем на удаленном хосте:echo 'hello from remote-host' | xclip -selection clipboard
-X
для пересылки X11 через SSH, программы X11 смогут обновлять ваш буфер обмена с помощью настроек XQuartz, указанных выше. Одноразовая команда должна продемонстрировать, что отправка чего-либо черезecho
буфер обмена удаленного хоста черезxclip
работает и должна синхронизироваться с вашим локальным клиентом SSH. Обратите внимание, что @ gdw2 говорит: «| xclip
Внутри двойных кавычек». Таким образом, он выполнит команду на удаленном сервере для отправки чего-либо в буфер обмена.Порт обратного туннеля на сервере ssh
Все существующие решения либо требуют:
xclip
на сервере отлично работает) илиВот еще один способ сделать это, хотя вам нужно будет изменить способ подключения ssh к компьютеру.
Я начал использовать это, и это далеко не так страшно, как кажется, так что попробуйте.
Клиент (запуск ssh-сессии)
(подсказка: сделайте это связыванием клавиш, чтобы вам не приходилось вводить его)
Клиент (другая вкладка)
Примечание: если у вас нет,
pbcopy
то простоtee
в файл.Сервер (внутри сессии SSH)
Другие заметки
На самом деле, даже если вы находитесь в середине сеанса SSH, есть способ запустить туннель, но я не хочу пугать людей от того, что на самом деле не так плохо, как кажется. Но я добавлю детали позже, если у меня появится интерес
источник
cat some_useful_content.txt | nc localhost 2000
команда, кажется, зависает, когда я делаю это. Мне нужно вручную ctr-c, чтобы остановить его, и только тогда контент попадает в мой клиентский клип / монтажный дискnc -l -p
у меня работает, а простоnc -l
нет. И у меня тоже есть проблема @AlanStorm.-c
. Я использую GNU Netcat, установленный Brew.Существуют различные инструменты для доступа к выборкам X11, включая xclip и XSel . Обратите внимание, что у X11 традиционно есть несколько вариантов выбора, и большинство программ понимают как буфер обмена, так и основной выбор (которые не совпадают). Emacs также может работать со вторичным выбором, но это редко, и никто не знает, что делать с буферами вырезания ...
Короче говоря, вы должны попробовать
xclip -i
/xclip -o
илиxclip -i -sel clip
/xclip -o -sel clip
илиxsel -i
/xsel -o
илиxsel -i -b
/xsel -o -b
, в зависимости от того, что вы хотите.источник
ssh -C -X user@remote-host
. Если запуск xclip на удаленной стороне не работает, убедитесь, чтоX11Forwarding yes
он установлен в удаленном/etc/ssh/sshd_config
файле. Также убедитесь, чтоxauth
установлен на удаленной стороне. Для безголовой машины вы можете установитьxauth
иxvfb
.xvfb
упоминание. Я работал безголовый сервер, поэтому X11, должно быть, не работал!Это мое решение на основе обратного туннеля SSH, netcat и xclip.
Сначала создайте скрипт (например, clipboard-daemon.sh) на вашей рабочей станции:
и запустить его в фоновом режиме.
После получения части данных начнется вывод nc-трубопровода в xclip и процесс возрождения.
Затем запустите соединение SSH с удаленным хостом:
Когда вы вошли в систему на удаленном компьютере, попробуйте это:
затем попробуйте вставить на свою рабочую станцию
Конечно, вы можете написать скрипт-обертку, который сначала запускает clipboard-daemon.sh, а затем сессию ssh. Вот как это работает для меня. Наслаждаться.
источник
Не однострочный, но не требует дополнительного SSH .
netcat
при необходимостиcat ~/some_file.txt | nc termbin.com 9999
. Это скопирует выходные данные наtermbin
веб-сайт и напечатает URL-адрес вашего вывода.Конечно, не используйте его для конфиденциального контента.
источник
Этот ответ развивается как на выбранный ответ , добавляя больше безопасности.
Этот ответ обсуждался в общем виде
Там , где безопасность может отсутствовать в то
ssh
разрешение позволяет<user B>
наhost B>
кssh
вhost A
и выполнить любую команду.Конечно ,
B
дляA
доступа может быть уже закрытого типа с помощьюssh
ключа, и он может даже иметь пароль. Но другой уровень безопасности может ограничивать область допустимых команд, которыеB
могут выполнятьсяA
, например, которыеrm -rf /
не могут быть вызваны. (Это особенно важно, когдаssh
ключ не имеет пароля.)К счастью,
ssh
имеет встроенную функцию, называемую ограничением команд или принудительной командой . Смотрите ssh.com , или этот вопрос serverfault.com .Приведенное ниже решение показывает решение в общей форме вместе с принудительным
ssh
ограничением команд .Пример решения с добавленным ограничением команд
Это улучшенное решение безопасности следует общей форме - вызов из
ssh
сеансаhost-B
просто:Остальная часть этого показывает установку, чтобы заставить это работать.
Настройка ограничения команды ssh
Предположим, что учетная запись пользователя
B
isuser-B
, а B имеет ключ sshid-clip
, который был создан обычным способом (ssh-keygen
).Тогда в
user-A
'ssh каталоге есть файлкоторый распознает ключ
id-clip
и позволяетssh
соединение.Обычно содержимым каждой строки
authorized_keys
является именно тот открытый ключ, который авторизуется, например, содержимоеid-clip.pub
.Однако для принудительного ограничения команды необходимо, чтобы содержимое открытого ключа предшествовало (в той же строке) команде, которая должна быть выполнена.
В нашем случае:
Назначенная команда
"/home/user-A/.ssh/allowed-commands.sh id-clip"
и только эта назначенная команда выполняется всякий раз, когдаid-clip
используется ключ, инициироватьssh
соединение сhost-A
- независимо от того, какая команда записана вssh
командной строке .Команда указывает файл скрипта
allowed-commands.sh
, и содержимое этого файла сценарияОригинальный звонок
ssh
на машинуB
былСтрока
to-clipboard
передаетсяallowed-commands.sh
переменной окруженияSSH_ORIGINAL_COMMAND
. Кроме того, мы передали имя ключаid-clip
, из строки, вauthorized_keys
которой доступен толькоid-clip
.Линия
это просто всплывающее окно с сообщением о том, что буфер обмена пишется - это, вероятно, также хорошая функция безопасности. (
notify-send
работает на Ubuntu 18.04, возможно, не на других).В линии
параметр
--display :0
необходим, потому что у процесса нет собственного X-дисплея с буфером обмена, поэтому он должен быть явно указан. Это значение:0
работает в Ubuntu 18.04 с сервером окон Wayland. На других установках это может не сработать. Для стандартного X-сервера этот ответ может помочь.host-A
/etc/ssh/sshd_config
параметрыНаконец, несколько параметров
/etc/ssh/sshd_config
на хосте,A
которые должны быть установлены, чтобы обеспечить разрешение на подключение и разрешение использоватьssh
-key только без пароля:Чтобы
sshd
сервер перечитал конфигили
вывод
Это
to-clipboard
требует определенных усилий, но другие функции помимо этого могут быть построены параллельно в той же самой структуре.источник
Решение @rhileighalmgren хорошо, но pbcopy раздражающе скопирует последний символ "\ n", я использую "head", чтобы удалить последний символ, чтобы предотвратить это:
Мое полное решение здесь: http://taylor.woodstitch.com/linux/copy-local-clipboard-remote-ssh-server/
источник
Самое простое решение из всех, если вы работаете в OS X и используете Terminal, и вы ssh'ing на удаленном сервере и хотите получить результаты текстового файла, журнала или CSV, просто:
1)
Cmd-K
очистить вывод терминала2)
cat <filename>
для отображения содержимого файла3)
Cmd-S
сохранить вывод терминалаВам придется вручную удалить первую строку и последнюю строку файла, но этот метод немного проще, чем полагаться на другие устанавливаемые пакеты, «обратные туннели» и пытаться иметь статический IP-адрес и т. Д.
источник
scp
!