Pytanie Borderline ServerFault, ale programuję kilka skryptów powłoki, więc najpierw próbuję :)
Większość * nixów ma polecenie, które pozwoli ci potokować / przekierować wyjście do lokalnego schowka / tablicy i pobrać je z tego samego. W systemie OS X te polecenia to
pbcopy, pbpaste
Czy istnieje możliwość replikacji tej funkcji podczas korzystania z SSHed na innym serwerze? To jest,
- Używam komputera A.
- Otwieram okno terminala
- I SSH do komputera B
- Wykonuję polecenie na komputerze B.
- Dane wyjściowe komputera B są przekierowywane lub automatycznie kopiowane do schowka komputera A.
I tak, wiem, że mógłbym po prostu (wzdrygnąć się) użyć myszy, aby wybrać tekst z polecenia, ale przyzwyczaiłem się do przepływu pracy bezpośredniego przeskakiwania danych wyjściowych do schowka, że chcę tego samego dla moich sesji zdalnych.
Kod jest przydatny, ale mile widziane jest również podejście ogólne.
:'<,'>w !ssh desktop pbcopy
-e none
flagi ssh opisanej tutaj: unix.stackexchange.com/questions/210615/…Mój ulubiony sposób to
ssh [remote-machine] "cat log.txt" | xclip -selection c
. Jest to najbardziej przydatne, gdy nie chcesz (lub nie możesz) ssh ze zdalnego do lokalnego.Edycja: na Cygwin
ssh [remote-machine] "cat log.txt" > /dev/clipboard
.Edycja: pomocny komentarz od nbren12:
źródło
ssh [remote-machine] "cat log.txt" | pbcopy
cat
, aby uzyskać to do pracy na cygwin Windows 8:ssh [remote-machine] "cat log.txt" | cat > /dev/clipboard
(oczywiście mój zdalne polecenia nie byłocat
, to było coś innego wewnątrz Vagrant maszynie wirtualnej, więc faktycznie ranvagrant ssh -c "command" | cat > /dev/clipboard
)RemoteForward 127.0.0.1:2222 127.0.0.1:22
do wpisu serwerów w swoim lokalnym.ssh/config
, a następnie wykonajssh -p 2222 127.0.0.1
na zdalnym komputerze, który następnie przekieruje połączenie na komputer lokalny.Znalazłem świetne rozwiązanie, które nie wymaga odwrotnego połączenia ssh!
Możesz użyć xclip na zdalnym hoście, wraz z przekazywaniem ssh X11 i XQuartz w systemie OSX.
Aby to ustawić:
,
)ssh -X remote-host "echo 'hello from remote-host' | xclip -selection clipboard"
źródło
ssh remote-host "echo 'hello from remote-host' | pbcopy
? To byłaby doskonała odpowiedź, gdyby działało coś takiego:ssh -X remote-host
wtedy na zdalnym hoście:echo 'hello from remote-host' | xclip -selection clipboard
-X
do przekazywania X11 przez SSH, programy X11 będą mogły aktualizować twój schowek za pomocą powyższych ustawień XQuartz. Jednorazowym poleceniem jest zademonstrowanie, że wysłanie czegoś przezecho
do schowka zdalnego hosta za pośrednictwemxclip
działa i powinno zostać zsynchronizowane z lokalnym hostem klienta SSH. Zwróć uwagę, jak mówi @ gdw2: „Znak| xclip
znajduje się w podwójnych cudzysłowach”. W związku z tym wykona jako polecenie na serwerze zdalnym, aby wysłać coś do schowka.Port odwrotnego tunelu na serwerze ssh
Wszystkie istniejące rozwiązania wymagają:
xclip
na serwerze działa świetnie) lubOto inny sposób, aby to zrobić, chociaż musisz zmodyfikować sposób podłączania ssh do komputera.
Zacząłem go używać i nie jest tak onieśmielający, jak wygląda, więc spróbuj.
Klient (uruchamianie sesji ssh)
(wskazówka: uczyń to klawiszem, więc nie musisz go wpisywać)
Klient (inna zakładka)
Uwaga: jeśli nie masz,
pbcopy
po prostutee
to do pliku.Serwer (wewnątrz sesji SSH)
Inne notatki
Właściwie nawet jeśli jesteś w trakcie sesji ssh, istnieje sposób na uruchomienie tunelu, ale nie chcę odstraszać ludzi od tego, co naprawdę nie jest tak złe, na jakie wygląda. Ale szczegóły dodam później, jeśli zobaczę jakieś zainteresowanie
źródło
cat some_useful_content.txt | nc localhost 2000
polecenie wydaje się zawieszać, kiedy to robię. Muszę ręcznie wykonać ctr-c, aby to zatrzymać, i dopiero wtedy zawartość trafia do mojego klipu / stołu montażowego klientanc -l -p
działa dla mnie, ale po prostunc -l
nie. Mam też problem z @AlanStorm.-c
. Używam GNU netcat zainstalowanego przez brew.Istnieją różne narzędzia umożliwiające dostęp do wyborów X11, w tym xclip i XSel . Zauważ, że X11 tradycyjnie ma wiele wyborów, a większość programów ma pewne zrozumienie zarówno schowka, jak i podstawowego wyboru (które nie są takie same). Emacs może również pracować z drugorzędnym wyborem, ale to rzadkie i nikt tak naprawdę nie wie, co zrobić z obciętymi buforami ...
Krótko mówiąc, powinieneś spróbować
xclip -i
/xclip -o
lubxclip -i -sel clip
/xclip -o -sel clip
lubxsel -i
/xsel -o
lubxsel -i -b
/xsel -o -b
, w zależności od tego, czego chcesz.źródło
ssh -C -X user@remote-host
. Jeśli wydaje się, że uruchomienie xclip po stronie zdalnej nie działa, upewnij się, żeX11Forwarding yes
jest ustawione w/etc/ssh/sshd_config
pliku zdalnym . Upewnij się również, żexauth
jest zainstalowany po stronie zdalnej. W przypadku maszyny bezgłowej można zainstalowaćxauth
ixvfb
.xvfb
wzmiankę. Używałem bezgłowego serwera, więc X11 nie mógł działać!To jest moje rozwiązanie oparte o tunel zwrotny SSH, netcat i xclip.
Najpierw utwórz skrypt (np. Clipboard-daemon.sh) na swojej stacji roboczej:
i uruchom go w tle.
Po otrzymaniu części danych rozpocznie przesyłanie danych wyjściowych przez nc do xclip i proces odradzania
Następnie uruchom połączenie ssh ze zdalnym hostem:
Po zalogowaniu się na zdalnym komputerze spróbuj tego:
następnie spróbuj wkleić na swojej stacji roboczej
Możesz oczywiście napisać skrypt opakowujący, który najpierw uruchamia sesję clipboard-daemon.sh, a następnie ssh. Tak to działa u mnie. Cieszyć się.
źródło
Nie jest to jedna linijka, ale nie wymaga dodatkowego ssh .
netcat
jeśli to koniecznecat ~/some_file.txt | nc termbin.com 9999
. Spowoduje to skopiowanie danych wyjściowych dotermbin
witryny internetowej i wydrukowanie adresu URL do wyniku.Oczywiście nie używaj go do wrażliwych treści.
źródło
Ta odpowiedź rozwija obie na wybraną odpowiedź , dodając więcej bezpieczeństwa.
Ta odpowiedź dotyczyła ogólnej formy
Gdzie zabezpieczenie może być brak jest w
ssh
uprawnienia pozwalające<user B>
nahost B>
nassh
nahost A
i wykonać dowolną komendę.Oczywiście
B
doA
dostępu mogą być już ogrodzony przezssh
klucz, a nawet może mieć hasło. Ale inna warstwa zabezpieczeń może ograniczyć zakres dozwolonych poleceń, któreB
mogą być wykonywaneA
, np. Tak, żerm -rf /
nie można ich wywołać. (Jest to szczególnie ważne, gdyssh
klucz nie ma hasła).Na szczęście
ssh
ma wbudowaną funkcję o nazwie ograniczenie poleceń lub polecenie wymuszone . Zobacz ssh.com lub to pytanie serverfault.com .Poniższe rozwiązanie przedstawia ogólne rozwiązanie formularza wraz z
ssh
ograniczeniami poleceń wymuszonym .Przykład Rozwiązanie z ograniczeniami poleceń dodanymi
To ulepszone rozwiązanie pod względem bezpieczeństwa ma ogólną formę - połączenie z
ssh
sesjihost-B
to po prostu:Reszta tego pokazuje konfigurację, aby to zadziałało.
Konfiguracja ograniczenia polecenia ssh
Załóżmy, że konto użytkownika na
B
touser-B
, a B ma klucz sshid-clip
, który został utworzony w zwykły sposób (ssh-keygen
).Następnie w
user-A
katalogu ssh znajduje się plikktóry rozpoznaje klucz
id-clip
i umożliwiassh
połączenie.Zwykle zawartość każdego wiersza
authorized_keys
jest dokładnie autoryzowanym kluczem publicznym, np. Zawartośćid-clip.pub
.Jednak aby wymusić ograniczenie poleceń , zawartość klucza publicznego jest poprzedzona (w tym samym wierszu) poleceniem, które ma zostać wykonane.
W naszym przypadku:
Wyznaczone polecenie
"/home/user-A/.ssh/allowed-commands.sh id-clip"
i tylko to wyznaczone polecenie jest wykonywane za każdym razem, gdy klawiszid-clip
jest używany do zainicjowaniassh
połączeniahost-A
- bez względu na to, jakie polecenie jest zapisane wssh
wierszu poleceń .Polecenie wskazuje plik skryptu
allowed-commands.sh
, a zawartość tego pliku toPierwotnym wezwaniem
ssh
na maszynęB
byłoCiąg
to-clipboard
jest przekazywany doallowed-commands.sh
zmiennej środowiskowejSSH_ORIGINAL_COMMAND
. Dodatkowo przekazaliśmy nazwę kluczaid-clip
z linii, doauthorized_keys
której ma dostęp tylkoid-clip
.Linia
to tylko wyskakujące okienko z wiadomością, które informuje, że trwa pisanie schowka - to prawdopodobnie dobra funkcja bezpieczeństwa. (
notify-send
działa na Ubuntu 18.04, może nie inne).W linii
parametr
--display :0
jest niezbędny, ponieważ proces nie ma własnego wyświetlacza X ze schowkiem, więc musi być wyraźnie określony. Ta wartość:0
działa na Ubuntu 18.04 z serwerem okien Wayland. W innych konfiguracjach może nie działać. W przypadku standardowego serwera X ta odpowiedź może pomóc.host-A
/etc/ssh/sshd_config
parametryNa koniec kilka parametrów
/etc/ssh/sshd_config
na hoście,A
które należy ustawić, aby zapewnić pozwolenie na połączenie i pozwolenie na używaniessh
-key tylko bez hasła:Aby
sshd
serwer ponownie odczytał plik configlub
wniosek
Konfiguracja
to-clipboard
wymaga pewnego wysiłku, ale inne funkcje oprócz tego mogą być konstruowane równolegle w tym samym frameworku.źródło
@rhileighalmgren rozwiązanie jest dobre, ale pbcopy irytująco skopiuje ostatni znak "\ n", używam "head", aby usunąć ostatni znak, aby temu zapobiec:
Moje pełne rozwiązanie jest tutaj: http://taylor.woodstitch.com/linux/copy-local-clipboard-remote-ssh-server/
źródło
Najprostsze rozwiązanie ze wszystkich, jeśli korzystasz z systemu OS X przy użyciu terminala i przebywasz na zdalnym serwerze i chcesz pobrać wyniki z pliku tekstowego, dziennika lub pliku csv, po prostu:
1)
Cmd-K
aby wyczyścić wyjście terminala2)
cat <filename>
aby wyświetlić zawartość pliku3)
Cmd-S
aby zapisać dane wyjściowe terminalaBędziesz musiał ręcznie usunąć pierwszą i ostatnią linię pliku, ale ta metoda jest nieco prostsza niż poleganie na innych pakietach do zainstalowania, "odwróconych tunelach" i próbie posiadania statycznego adresu IP itp.
źródło
scp
!